我在我的应用程序中使用 ParallelOldGC
作为垃圾收集器。最大堆大小设置为 2 GB 并且正在处理 Java 热点 6、27 更新。
由于旧空间已满,我的应用程序创建了如此多的长生命周期对象。因此,根据并行 GC 算法,当旧空间快满时会触发 Full GC。由于堆大小为 2 GB,因此清理旧空间收集器需要超过 100 秒,这是 Not Acceptable 。
我正在考虑为旧空间设置阈值,比如 30,这样当旧空间完成 30% 时,将调用 Full GC,因为此解决方案会增加 FullGC 计数,但会减少应用程序暂停时间。
我观察到 CMS 包含这样的设施 XX:CMSInitiatingOccupancyFraction
但由于 CMS 的一些缺点无法切换到 CMS。那么在 ParallelOldGC 中是否有任何设施可以设置
提前致谢。
最佳答案
As the heap size is 2 GB so to clean the old space the collector take more than 100 seconds which is not acceptable.
由于您实际要解决的是较长的停顿时间,您可以通过 -XX:MaxGCPauseMillis=
设置停顿时间目标,收集器将尝试满足那个。
它可能由于各种原因而无法满足它,例如因为不允许在收集时消耗足够的 CPU 时间(通过 GCTimeRatio
),或者仅仅是因为您有太多旧的 Activity 对象以至于无法满足目标(在这些情况下使用 G1 或 CMS)。
关于java - ParallelOldGC 垃圾收集器中旧空间的阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23911521/