Дізнатися розмір java heap memory size

Дізнатися розмір java heap memory size

Дізнатися розмір Java Heap Memory Size

Є проблема з Java Heap Memory Size, її потрібно нормально вказати для того щоб все нормально працювало (наприклад, веб-сервер tomcat, liferay, OpenMRS і так далі) і в даній статті «Дізнатися розмір Java Heap Memory Size» розповім як можна знайти оптимальне значення для java.

Зараз я покажу вам, як використовувати-XX: + PrintFlagsFinal щоб дізнатися ваш розмір купи «heap size». В Java, за замовчуванням і максимальний розмір купи розподіляються на підставі алгоритму - ергономіки (ergonomics algorithm).

Як же розраховується Heap sizes?

Початковий розмір купи - це співвідношення 1/64 фізичної пам'яті до 1 Гб. (Initial heap size of 1/64 of physical memory up to 1Gbyte)
Максимальний розмір купи - це співвідношення 1/4 фізичної пам'яті до 1 Гб. (Maximum heap size of 1/4 of physical memory up to 1Gbyte)

Проте, алгоритм що вище, якраз для довідки, можуть варіюватися в різних VM.

Дізнатися розмір java heap memory size

Огляд пам'яті Java

Короткий огляд структури пам'яті Java:

1. Java Heap Size
Місце для зберігання об'єктів, створених додатком Java, це де Garbage Collection бере пам'ять для додатків Java. Для «важкого процесу Java», недостатній розмір купи викличе популярну помилку: java.lang.OutOfMemoryError: Java heap space.

-Xms - Ввести розмір Java купа «Java heap size»
-Xmx - Встановити максимальний розмір Java купа «Java heap size»

Дізнатися розмір java heap memory size

Для JVM виділено наступні значення за замовчуванням:

Java heap size
InitialHeapSize = 64781184 байт (61.7 Мб) і MaxHeapSize = 1038090240 байт (990Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 174063616 байт (166 Мб)

Thread Stack Size
ThreadStackSize = 1024 кб (1 Мб)

Виділений розмір купи (heap memory size) досить близький до результатів ергономіки.

#ergonomics algorithm
Initial heap size = 4096M / 64 = 64 Мб
Maximum heap size = 4096M / 4 = 1024 Мб

Середу тестування має такі характеристики:

ОС. Mac OSX 10.9
RAM. 8 Гб оперативної пам'яті
CPU. 4 x Поцессор
JDK. 1.7

Запускаємо команду щоб перевірити:

Дізнатися розмір java heap memory size

Дізнатися розмір Java Heap Memory Size в macOS X

Для JVM виділено наступні значення за замовчуванням:

Java heap size
InitialHeapSize = 20655360 байт (19.69M) і MaxHeapSize = 331350016 bytes (316 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 байт (82 Мб).

Java Stack Size
ThreadStackSize = 1024 Кб (1 Мб)

Виділений розмір купи пам'яті (heap memory size) не мають ніякого значення, якщо порівняти з наступного результат за алгоритмом ергономіки.

#ergonomics algorithm
Initial heap size = 8192M / 64 = 128 Мб
Maximum heap size = 8192M / 4 = 2048 Мб

Windows
Grep немає в Windows, замість цього, ми використовуємо Findstr.

Середу тестування має такі характеристики:

ОС. Windows 8
RAM. 16 Гб
CPU. 8 x процесор
JDK. 1.7

Дізнатися розмір java heap memory size

Дізнатися розмір Java Heap Memory Size в windows

Для JVM в Windows ОС виділено наступні значення за замовчуванням:

Java heap size
InitialHeapSize = 266634176 байт (256 Мб) і MaxHeapSize = 4266146816 байт (4068 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 bytes (823 Мб).

Java Stack Size
ThreadStackSize = 0 kilobytes. (Weird ...)

Виділений розмір купи пам'яті майже такий же як і за алгоритмом ергономіка:

#ergonomics algorithm
Initial heap size = 16384/64 = 256 Мб
Maximum heap size = 16384/4 = 4096 Мб

Пропоновані для Java Memory

Нижче, я привів мою рекомендацію (параметри) для малої і середньої навантаження додатків Java 🙂

Heap = -Xms512m -Xmx1024m
PermGen = -XX: PermSize = 64m -XX: MaxPermSize = 128m
Thread = -Xss512k

P.S: Для більшості проектів Java, 512k пам'яті для потоку (thread) більш ніж достатньо.

Що це -XX: + PrintCommandLineFlags?
Це -XX: + PrintCommandLineFlags використовується для виведення значення, тільки для зміни VM (позначається так: = символ).

Нарешті, значення за замовчуванням для heap memory, perm gem і stack size відрізняється від JVM, не чекайте що JVM використовуватиме оптимальні значення для вашої програми Java.

На цьому, я завершую «Дізнатися розмір Java Heap Memory Size». Сподіваюся, було пізнавально.