终生代垃圾收集

时间:2014-07-09 16:16:57

标签: java garbage-collection jvm

JVM垃圾收集器如何清除 Tenured Generation ? 直到分配的堆大小已满或?

因为对于我的项目,我有一个ThreadPoolExecutor,它提交了大量的任务。 由于这些runnable tasks是由inner class创建的,因此它们对外部实例有一定的引用。它们很容易在GC Eden Space中生存,最后传递到Tenured Generation形式Survivor Space。而且,通过Java Profiler监视JVM,我注意到这个Tenured Generation永远不会被清除(直到完全,对于我的情况)。

所以我的问题是:

  1. Garbage Collector如何适用于Tenured Generation堆?
  2. 如果我想强迫GC内存以防止不可预测的未来Heap问题,我该怎么办?

1 个答案:

答案 0 :(得分:1)

  

垃圾收集器如何为Tenured Generation Heap工作?

嗯,就像你描述的那样。在需要空间(或可能很快需要空间)之前没有任何事情发生,此时会触发主要的GC。我想这是预期的行为 - 不要让世界上的停顿更频繁地触发它们。

  

如果我想强制内存的GC来防止不可预测的未来堆问题,我该怎么办?

从技术上讲,你做不到。无论您提供任何提示,GC都会随时触发。如果你想建议运行时执行GC,你可以使用System.gc(),但同样,这只是一个建议 - 如果需要,运行时可以自由地忽略它。从我所听到的情况来看,System.gc()电话往往会被注意。