У меня есть отдельное 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, но я обнаружил, что размер кучи всегда немного изменяется:
красная линия представляет общий размер кучи, синяя представляет использованный. Я думаю, что красная линия должна быть прямой, но это не так.Но в другом веб-приложении с параметрами 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 и красная линия устойчивы по горизонтали, это то, что, я думаю, должно быть.
Основное различие между двумя приложениями - используемая стратегия GC, одно - параллельное GC, а другое - CMS.Влияет ли стратегия GC на изменение размера пространства кучи?Или параметр -Xmn влияет на изменение размера кучи, чего я не знал?