我正在尝试调整垃圾回收器,以便在短基准测试期间不触发它。
为此,我尝试将年轻代设得尽可能大,并确保创建的垃圾少于伊甸区大小。
我使用了以下参数:
java -Xmx1g -Xms1g -Xmn1g -XX:NewSize=1000m -XX:MaxNewSize=1g -XX:SurvivorRatio=10000 -verbose:gc Main
但是出于某种原因,当虚拟机内存仅为300M时,我仍然看到[Full GC]日志,是否有我遗漏的JVM调优措施?
我正在尝试调整垃圾回收器,以便在短基准测试期间不触发它。
为此,我尝试将年轻代设得尽可能大,并确保创建的垃圾少于伊甸区大小。
我使用了以下参数:
java -Xmx1g -Xms1g -Xmn1g -XX:NewSize=1000m -XX:MaxNewSize=1g -XX:SurvivorRatio=10000 -verbose:gc Main
但是出于某种原因,当虚拟机内存仅为300M时,我仍然看到[Full GC]日志,是否有我遗漏的JVM调优措施?
如果你的tenured space已经填满(大对象直接放入tenured space),那么你可能需要进行full GC。
通常我会尝试使用4-24 GB的eden大小,但确保tenured space的大小为0.5到2 GB。
[Full GC...]
的原因。-XX:NewRatio=1
如果您正在释放大量对象,则GC仍将运行,这不仅仅是等到您使用了所有分配的空间,如果这样做,它会在运行时导致严重的GC抖动。
您应该查看您的对象处理方式,以及是否可以更有效地使用。查看LMAX disrupter模式,了解如何通过更新对象值而不是释放和替换对象本身来重用对象的一些想法。
话虽如此,这是一篇关于调整GC的相当不错的文章 - http://developer.amd.com/documentation/articles/pages/4EasyWaystodoJavaGarbageCollectionTuning.aspx