【发布时间】:2011-07-16 10:01:29
【问题描述】:
我有一个导致产生大量垃圾的应用程序。第一个(也是几乎一个)标准是低 GC 暂停时间。我使用 visualgc 工具(和 gc 日志)尝试不同的 GC 参数。最佳参数如下。
-XX:+UseConcMarkSweepGC
-Xmx1172M
-Xms600M
-XX:+UseParNewGC
-XX:NewSize=150M
我的应用程序在带有 Java 1.6.0_21 的 SunOS 10 上运行。硬件为 2 x CPU 四核(uname -X 结果为 numCPU = 8)。
问题是
观察 GC 行为,在伊甸园空间创建新对象,直到伊甸园满。当 eden space full GC 运行时,清除垃圾,如果对象不是到 Old-gen 的死副本(我丢弃 'from' 和 'to' 空间),同样 Old-Gen 已满,GC 在 CMS-concurrent 阶段运行并清除 Old -gen 空间。 CMS 的某些部分是 Stop-the-world(暂停时间)。这是一个循环。
- 上面的场景是真的吗?
- GC clean old-gen space后,没有足够的空间expand old-gen space(XMS和XMS值不同)?
- Full GC 操作何时开始?如何决定?
- CMS 并发阶段持续时间取决于 Eden 空间大小,实际上我的预期是,Eden 空间不会影响 CMS 并发阶段持续时间。在 CMS 并发阶段,与伊甸园空间相关的 GC 发生了什么?
- 还有什么建议可以减少暂停时间?的确,对我来说最有价值的答案:)
谢谢
【问题讨论】: