我在我的应用程序中使用ParallelOldGC
作为垃圾收集器。最大堆大小设置为2 GB并且正在Java热点6,27更新。
我的应用程序创建了许多长寿命对象,因为旧空间已满。因此,根据并行GC算法,当旧空间几乎满时,全GC触发。由于堆大小为2 GB,因此为了清理旧空间,收集器需要超过100秒,这是不可接受的。
我正在考虑设置旧空间的阈值30,以便当旧空间完成30%时将调用Full GC,因为此解决方案将增加FullGC计数但会减少应用程序暂停时间。
我观察到CMS包含XX:CMSInitiatingOccupancyFraction
这样的功能,但是由于CMS无法切换到CMS的某些缺点,所以在ParallelOldGC中有任何设置
提前致谢。
答案 0 :(得分:0)
由于堆大小为2 GB,因此为了清理旧空间,收集器需要超过100秒,这是不可接受的。
由于您实际尝试解决的问题是暂停时间较长,因此可以通过-XX:MaxGCPauseMillis=
设置暂停时间目标,收集器将尝试来满足该目标。
它可能因各种原因而失败,例如因为它不允许在收集时烧掉足够的CPU时间(通过GCTimeRatio
),或者只是因为你有太多旧的活动对象无法满足目标(在这些情况下使用G1或CMS)