Java ParallelOldGC垃圾收集器中旧空间的阈值

Java ParallelOldGC垃圾收集器中旧空间的阈值,java,garbage-collection,jvm-hotspot,Java,Garbage Collection,Jvm Hotspot,我在应用程序中使用ParallelOldGC作为垃圾收集器。最大堆大小设置为2GB,并在Java热点6、27更新中工作 我的应用程序创建了这么多长寿命的对象,由于这些对象,旧空间被填满了。因此,根据并行GC算法,当旧空间几乎满时,会触发完全GC。由于堆大小为2GB,因此要清理旧空间,收集器需要100秒以上的时间,这是不可接受的 我正在考虑在旧空间上设置阈值,比如30,这样当旧空间以30%完成时,就会调用Full GC,因为这个解决方案会增加FullGC计数,但会减少应用程序暂停时间 我观察到CM

我在应用程序中使用
ParallelOldGC
作为垃圾收集器。最大堆大小设置为2GB,并在Java热点6、27更新中工作

我的应用程序创建了这么多长寿命的对象,由于这些对象,旧空间被填满了。因此,根据并行GC算法,当旧空间几乎满时,会触发完全GC。由于堆大小为2GB,因此要清理旧空间,收集器需要100秒以上的时间,这是不可接受的

我正在考虑在旧空间上设置阈值,比如30,这样当旧空间以30%完成时,就会调用Full GC,因为这个解决方案会增加FullGC计数,但会减少应用程序暂停时间

我观察到CMS包含具有
XX:CMSInitiatingOccupancyFraction
的设施,但由于CMS的某些缺陷,无法切换到CMS。因此,在ParallelOldGC中是否有任何设施可设置

提前谢谢

由于堆大小为2 GB,因此要清理旧空间,收集器需要100秒以上的时间,这是不可接受的

由于您实际上要解决的是较长的暂停时间,因此可以通过
-XX:MaxGCPauseMillis=
设置暂停时间目标,收集器将尝试满足这一目标

它可能会因各种原因而失败,例如,由于不允许在采集时消耗足够的CPU时间(通过
GCTimeRatio
),或者仅仅因为您有太多旧的活动对象而无法实现目标(在这些情况下使用G1或CMS)