是什么触发了Java中的完整垃圾回收?

时间:2012-03-03 13:12:46

标签: java garbage-collection performance

我想知道在Java中触发完全垃圾收集的确切情况。

显而易见的是:

  • 耗尽老一代
  • 耗尽烫发
  • 致电System.gc()

导致完整gc的其他病例怎么办?特别:

  • Survivor Space中没有足够的可用空间来复制来自伊甸园的物品。
  • 次要集合无法应对新对象的分配率(虽然不知道如何)。

我正在运行Sun Java 1.6并使用Concurrent Mark-Sweep和ParNew作为新一代。

2 个答案:

答案 0 :(得分:4)

我观察到另一种情况,在Ubuntu上使用Concurrent Mark-Sweep在Java Hotspot VM 1.6 64bit中触发完整的GC:

如果-XX:PermSize值不等于-XX:MaxPermSize(例如更小),当java需要扩展PermGen时偶尔会发生Full GC(即使它不需要分配比MaxPermSize更多的内存)。 所以设置-XX:PermSize和-XX:MaxPermSize是一样的好主意。

答案 1 :(得分:2)

这在很大程度上取决于你的jvm选项和你使用的jvm。

出于这个原因,我建议你看看“Java性能”这本书,约翰和亨特。