Изменение размера кучи jvm, когда -Xmx и -Xms одинаковы - PullRequest
0 голосов
/ 27 мая 2011

У меня есть отдельное 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, но я обнаружил, что размер кучи всегда немного изменяется: the red line represents the total heap size, the blue one represents used

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

его диаграмма использования визуальной кучи:

heap not resize when cms gc

Общий размер кучи ровно столько жетак как 2g и красная линия устойчивы по горизонтали, это то, что, я думаю, должно быть.

Основное различие между двумя приложениями - используемая стратегия GC, одно - параллельное GC, а другое - CMS.Влияет ли стратегия GC на изменение размера пространства кучи?Или параметр -Xmn влияет на изменение размера кучи, чего я не знал?

1 Ответ

0 голосов
/ 02 июля 2011

Parallel GC выполняет некоторые трюки с помощью так называемой эргономики GC, которая пытается изменить размеры внутреннего кучи (OLD, new, perm и т. Д.) Во время выполнения, чтобы помочь достичь пропускной способности мяса или целей задержки.инструмент мониторинга не ожидает увидеть части размера кучи и сообщает об этих изменениях напрямую, а не сглаживает их.

...