Пол — это Java
153 subscribers
13 photos
2 videos
2 files
26 links
Канал, в котором живет вымышленный на основе реальных событий разработчик Пол, и вместе с ним мы пробуем узнать, что такое Java и не только👨🏻‍💻

@polyackov_ot
Download Telegram
Как работает теория поколений в Heap

Долгое време модель памяти в Java оставалась для меня чем-то непостижимым. Я смотрел видео и читал статьи, но все это не принесло понимания. Но как-то раз, открыв VisualVM, картинка сложилась.

Тогда я и узнал, что...

😇 Все объекты попадают в рай!

1. Eden содержит только что созданные объекты;
2. Garbage Collector (GC) периодически проверяет объекты, и, если объект все еще используется, то перемещает его в активную область Survivor;
3. Survivor
делится на S0 и S1, которые чередуются в хранении выживших объектов при каждой проверке. Пока одна из областей содержит использующиеся объекты, вторая всегда остаётся пустой;
4. Объекты обладают счетчиком, который фиксирует, сколько раз GC проверил объект*;
5. Когда счетчик достигнет порогового значения, GC переместит объект в Old, а не в Survivor.

* Max Tenuring Threshold (MTT) — кол-во проверок GC-ом, которое должен пережить объект, чтобы оказаться в Old.
Histogram (скрин 1) наглядно демонстрирует кол-во объектов, переживших n проверок GC;

Чтобы лучше визуализировать работу GC, давайте рассмотрим скрин 2 и 3 ➡️
1* Запуск GC
2* Eden пустой после сборки мусора
3* S0 также опустел, а S1 стал активным и принял все выжившие объекты из Eden и S0, за исключением 4*
4* Old пополнился новыми объектами, которые пережили MTT сборок мусора

PS: Такая работа с S0/S1 приводит к тому что:
Часть памяти всегда простаивает,
✔️ но приносит большую пропускную способность.

PS1: Memory Size зависит от архитектуры приложения и выполняющихся процессов.
Алгоритм работы GC основывается на теории Слабой гипотезы о поколениях (или "Высокой детской смертности"), которая подразумевает, что объекты намного чаще умирают/перестают использоваться сразу после их создания.

Тем не менее, ваше приложение может, например, создать все необходимые объекты при старте и продолжать использовать их на протяжении всего времени. В таком случае запуски GC будут только потреблять ресурсы.

#jmm #heap #gc
@polyackov_ot
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🤯2