【发布时间】:2011-09-03 02:27:57
【问题描述】:
我有一个独立的 java 应用程序,它的 jvm 参数是:
-Xmx2g -Xms2g -Xmn1g -XX:PermSize=96m -XX:+DisableExplicitGC
-XX:+UseFastAccessorMethods -XX:+UseParallelGC -XX:+UseParallelOldGC
-XX:MaxTenuringThreshold=63 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true
正如我们所见,-Xmx 和 -Xms 都是 2g,但我发现堆大小总是会调整一点:
红线代表总堆大小,蓝线代表已使用 我认为红线应该是直的,但事实并非如此。 但在另一个 web 应用程序中,jvm 参数是:
-Xmx2g -Xms2g -Xmn512m -XX:PermSize=196m -Xss256k -XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly
-XX:CMSInitiatingOccupancyFraction=70 -XX:-ReduceInitialCardMarks
-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true
它的可视堆使用图是:
总堆大小正好2g,红线水平稳定,我觉得应该是这样。
这两个app的主要区别是使用的GC策略,一个是parallel GC,一个是CMS。 GC 策略对堆空间大小的调整有影响吗?或者 -Xmn 参数对堆调整大小有一些我不知道的影响?
【问题讨论】:
标签: jvm resize heap-memory