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)