我想知道在 Java 中触发完全垃圾收集的具体情况是什么。
显而易见的是:
- 老一代用完了
- 烫发代用完
- 调用 System.gc()
那么其他导致full gc的情况呢?特别:
- 幸存者空间中没有足够的可用空间来从 Eden 复制对象。
- 小型集合无法应对新对象的分配率(但不知道如何)。
我正在运行 Sun Java 1.6 并使用 Concurrent Mark-Sweep 和 ParNew 进行新一代。
我观察到另一种情况会在 Ubuntu 上的 Java Hotspot VM 1.6 64 位中使用并发标记清除触发完整 GC:
如果-XX:PermSize值不等于-XX:MaxPermSize(例如更小),当java需要扩展PermGen时(即使它不需要分配比MaxPermSize更多的内存),偶尔会发生Full GC。
因此,将 -XX:PermSize 和 -XX:MaxPermSize 设置为相同似乎是个好主意。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)