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

Для 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 в 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 в 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». Сподіваюся, було пізнавально.