Види пам’яті в java, kdiv - s blog

Вся пам'ять для JVM:
- Heap Mem (КУПА) - сховище для Джава об'єктів
- НЕ-Heap-memory (некучей) - использ-ся Джава для зберігання завантажених класів
та інших мета-даних. Строковий пул, або безліч рядків в купі? *, Etc
- Сам код JVM, внутр структури JVM, завантажений код агента, дані etc

Види пам'яті в java, kdiv - s blog

в купі - дві частини: New generation і Old generation пам'ять.
В New generation: Eden для new Object, два Survivor простору (from і to) одного і того ж розміру-там зберігаються вижили об'єкти після GC.
в Old generation: тут довгоживучі об'єкти

*. розташовується в області пам'яті, званої Java Heap - купа, в якій зберігаються всі змінні, створені програмно вашим додатком.

Without configuration, a client JVM uses this calculation for the spaces:

Отже, пам'ять процесу різниться на heap (купа) і non-heap (стек) пам'ять, і складається з 5 областей (memory pools, memory spaces):
1 • Eden Space (heap) - в цій області виділяться пам'ять під всі створювані з програми об'єкти. Велика частина об'єктів живе недовго (ітератори, тимчасові об'єкти, що використовуються всередині методів і т.п.), і видаляються при виконанні збірок сміття це області пам'яті, не переміщаються в інші області пам'яті. Коли дана область заповнюється (тобто кількість виділеної пам'яті в цій області перевищує деякий заданий відсоток), GC виконує швидку (minor collection) збірку сміття. У порівнянні з повною збіркою сміття вона займає мало часу, і зачіпає тільки цю область пам'яті - очищає від застарілих об'єктів Eden Space і переміщує вижили об'єкти в наступну область.
2 • Survivor Space (heap) - сюди переміщаються об'єкти з попередньої, після того, як вони пережили хоча б одну збірку сміття. Час від часу довгоживучі об'єкти з цієї області переміщаються в Tenured Space.
3 • Tenured (Old) Generation (heap) - Тут накопичуються довгоживучі об'єкти (великі високорівневі об'єкти, Сінглтон, менеджери ресурсів та ін.). Коли заповнюється ця область, виконується повна збірка сміття (full, major collection), яка обробляє всі створені JVM об'єкти.
4 • Permanent Generation (non-heap) - Тут зберігається метаінформація, використовувана JVM (використовувані класи, методи і т.п.). Зокрема оновив
5 • Code Cache (non-heap) - ця область використовується JVM, коли включена JIT-компіляція, в ній кешируєтся скомпільований платформенно - залежний код.

Види пам'яті в java, kdiv - s blog
Види пам'яті в java, kdiv - s blog