Shr*_*kar 3 java garbage-collection future
我正在编写一些代码,我可能需要创建一个无限数量的未来对象(java.util.concurrent.Future).
但我担心某些时候内存不足.
这里有几个问题:
您最终需要删除对Futures的任何引用,以便对它们进行垃圾回收.通常的做法是维护Futures 的集合并定期检查是否isDone()返回true.如果是,则任务已完成,并且可以清除对它的引用.如果你担心堆积如山其中一些可能是安全的中断长时间运行的任务,你需要两个呼叫cancel()的Future和删除/空出其可能存在的任何引用.
一般而言,构建一个可能经历无限增长的系统始终是一个坏主意.如果未完成Future对象的数量变得过大,则应在系统中的其他位置应用反压.
不一定是"一旦未来完成,就不会在任何地方被引用".例如,引用它的客户端可以get()在任何时候通过该方法请求结果.因此,JVM需要保持Future活动状态,直到所有这些外部引用都被删除.当Future"完成"(意味着它完成了任务或被取消)时,线程池中的引用将被删除.
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |