как узнать java heap memory size


java heap memory size

Для вычисления необходимого размера кучи (heap) мы воспользуемся опцией -XX:+PrintFlagsFinal. В Java размер изначального (initial) и максимального (maximum) размера кучи (heap) выделяется по эргономическому алгоритму, дополнительно ссылки для java 7 и для java 8.

Если коротко то все это расчитывается по следующей формуле:

  • Изначальный размер кучи (initial heap size)

    Соотношение 164 от количества физической памяти на 1GB

  • Максимальный разер кучи (maximum heap size)

    Соотношение 14 от количества физической памяти на 1GB

К примеру рассмотрим вот такую машинку:

RAM: 6 GB
JDK: 1.7

Для отображения необходимой информации необходимо выполнить следующую команду:

java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Вот такой результат мы должны увидеть на экране:

java heap memory size example 01

Итого по полученным данным:

  • Изначальный размер кучи (initial heap size)

    InitialHeapSize = 97801152 байт (97,8 Мб)

  • Максимальный разер кучи (maximum heap size)

    MaxHeapSize = 1566572544 байт (1,5 Гб)

Выделенный размер кучи (heap memory size) довольно близок к результатам эргономики:

  • Изначальный размер кучи (initial heap size)

    6144 Мб / 64 = 96 Мб

  • Максимальный разер кучи (maximum heap size)

    6144 Мб / 4 = 1536 Гб

Для установки изначального размера кучи (initial heap size) используют -Xms, а для максимального размера кучи (maximum heap size) используют -Xmx.

Итого получаем команду для запуска:

$ java -Xms96m -Xmx1536m JavaApp

Как правило значения округляют в большую сторону, так что не бойтесь выделить немного больше и эксперементировать.

Источник: Find out your Java heap memory size