CMSInitiatingOccupancyFraction决定何时启动CMS(为了使此选项生效,您还必须设置
-XX:+UseCMSInitiatingOccupancyOnly)。
MaxHeapFreeRatio是确定世代空间大小的选项。
参见例如…
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
通常无法加快并发收集,但可以更早启动。当旧一代中已分配空间的百分比超过阈值时,并发收集开始运行。此阈值是根据并发收集器的一般经验计算得出的。如果正在进行完整收集,则可能需要更早启动并发收集。命令行标志CMSInitiatingOccupancyFraction可用于设置启动收集的级别。其默认值为大约68%。调整值的命令行是
-XX:CMSInitiatingOccupancyFraction=<percent>
http://www.oracle.com/technetwork/java/gc-
tuning-5-138395.html
默认情况下,虚拟机会在每个集合上增加或缩小堆,以尝试将每个集合中活动对象的可用空间比例保持在特定范围内。此目标范围由参数
-XX:MinHeapFreeRatio=<minimum>和设置为百分比-XX:MaxHeapFreeRatio=<maximum>,总大小由限制为下限-Xms,之上为-Xmx。
.. 要么 ..
http://www.petefreitag.com/articles/gctuning/
-XX:MaxHeapFreeRatio-当一代中的可用空间百分比超过该值时,一代将缩小以满足该值。默认值为70
编辑:我用一个测试程序运行了一些模拟,该程序只是随机创建字节数组的映射并将其复制到周围。我注意到a)分数值未得到尊重-
特别是采用保守值(例如50),CMS初始标记阶段的占用率远远超过50%,通常约为70-80%;
b)分数值较小仍使CMS初始阶段发生得较早(使用的程序
-Xmx1536m -Xmx1536m -XX:NewSize=512m-XX:+UseConcMarkSweepGc+ gc日志记录和两个测试参数)
我还发现了与此有关的旧错误报告:http
:
//bugs.sun.com/bugdatabase/view_bug.do?bug_id=6486089



