Download - Секреты сборки мусора в Java [DUMP-IT 2012]
![Page 2: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/2.jpg)
О чём этот доклад?
• Обзор проблемы автоматического управления памятью
• Stop-the-world паузы – причины
• Сборка мусора в современных JVM
![Page 3: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/3.jpg)
Сборка мусора
Языки использующие автоматическое управление памятью
Java, JavaScript, Erlang, Haskell, Python, PHP, C#, Ruby, Perl, SmallTalk, OCaml, List, Scala, ML, Go, D, …
… and counting
Языки не использующие автоматическое управление памятью
C, C++, Pascal/Delphi, Objective-C
Что я забыл?
![Page 4: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/4.jpg)
Способы сборки мусора
Мусор – структура данных (объект) в памяти не достижимый из программного кода.
Подсчёт ссылок
Транзитивное замыкание ссылок
Вообще не собирать
![Page 5: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/5.jpg)
Подсчёт ссылок
+ Просто
+ Не требует пауз для сбора мусора
– Не очищает циклические графы
– Дополнительные 15-30% нагрузки CPU
– Плохо сочетается с много поточностью
![Page 6: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/6.jpg)
Транзитивное замыкание ссылок
• Корневой набор ссылок Статические переменные
Локальные переменные
• Объекты достижимые из корневых ссылок – живые
• Объекты недостижимые из корневых ссылок – мусор
В общем случае, граф объектов не должен меняться по мере обхода. Следовательно, прикладные потоки должны быть остановлены пока идёт сборка мусора.
![Page 7: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/7.jpg)
Алгоритмы сборки мусора
• Mark-Sweep Фаза 1 – маркировка достижимых объектов
Фаза 2 – “вычистка” мусора
• Copy collector (сборка копированием) Использует две области памяти, но выполняется в один проход
• Mark-Sweep-Compact Mark-Sweep + перемещение живых объектов
![Page 8: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/8.jpg)
Трёх цветная маркировка
roo
ts
![Page 9: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/9.jpg)
Трёх цветная маркировка
roo
tsro
ots
![Page 10: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/10.jpg)
Трёх цветная маркировка
roo
tsro
ots
![Page 11: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/11.jpg)
Трёх цветная маркировка
roo
tsro
ots
![Page 12: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/12.jpg)
Сборка копированием
FROM
TO
roo
ts
![Page 13: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/13.jpg)
Сборка копированием
FROM
TO
roo
ts
FROM
TO
roo
ts
![Page 14: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/14.jpg)
Сборка копированием
FROM
TO
roo
ts
FROM
TO
roo
ts
1
![Page 15: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/15.jpg)
Сборка копированием
FROM
TO
roo
ts
FROM
TO
roo
ts
1 2
![Page 16: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/16.jpg)
Сборка копированием
FROM
TO
roo
ts
FROM
TO
roo
ts
1 2
![Page 17: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/17.jpg)
Сборка копированием
FROM
TO
roo
ts
FROM
TO
roo
ts
1 23
![Page 18: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/18.jpg)
Экономика сборки мусора
S – объём кучи
L – объём живых объектов
Copy collection
Эффективность
Mark-Sweep
Эффективность
L
LSc
S
LSc
L
LSc
21
Объём мусора в куче
![Page 19: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/19.jpg)
Слабая гипотеза о поколениях
Постулаты Большинство объектов умирают молодыми Число ссылок на молодые объекты мало
Следствие Если хранить молодые объекты отдельно от старых, можно обеспечить высокую пропускную способность (молодое поколение) и эффективное использование памяти (старое поколение).
![Page 20: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/20.jpg)
Демография объектов в куче
См
ер
тно
сть
(б
ай
т/с)
Возраст объектов
Период молодой сборки
Период старой сборки
∞
![Page 21: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/21.jpg)
Generational collection
Молодое поколение
Сборщик настроен на пропускную способность
Старое поколение
Сборщик настроен на эффективное использование памяти
Продвижение (promotion) объектов в старое поколение
Сборщик молодого поколения копирует живые объекты в старое поколение после достижения “зрелого” возраста
![Page 22: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/22.jpg)
Generational collection
Как получить все указатели из старого поколения на молодое?
Ответ – барьер на запись
Каждый раз при записи указателя в память в “старом” пространстве, срабатывает барьер
![Page 23: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/23.jpg)
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Scan stack tracesScan dirty pages in old space
Сбор “корневых” ссылок
![Page 24: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/24.jpg)
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Clean cardsRecursive copy of live objects (only live objects are traversed)
Копирование живых объектов
![Page 25: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/25.jpg)
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Сборка закончена
Области памяти, не помеченные в таблице карт, не могут содержать ссылки на молодое поколение
![Page 26: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/26.jpg)
Stop-the-world паузы
• Изменение графа объектов во время обхода может привести к пропуску достижимых объектов
• Большинство managed runtimes может перемещать объекты только в режиме паузы
![Page 27: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/27.jpg)
Stop-the-world паузы
Параллельные (parallel) алгоритмы Используют несколько потоков чтобы сократить время пауз
Фоновые (concurrent) алгоритмы Выполняют большую часть работы в фоновом режиме (без STW пауз)
Инкрементальные алгоритмы Много маленьких STW вместо одной длительной
![Page 28: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/28.jpg)
Фоновая маркировка
Проблема Граф объектов меняется по мере обхода * * Даже в функциональных языках могут выполняться отложенные вычисления, меняющие граф
Решение барьер на запись – отслеживать ссылки изменившиеся за время обхода
![Page 29: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/29.jpg)
Фоновая маркировка
Card marking write barrier
HotSpot CMS, JRockit, IBM J9
Snapshot-at-the-beginning (SATB) write barrier
HotSpot G1
Альтернатива барьеру на запись – барьер на чтение
Azul Zing JVM
![Page 30: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/30.jpg)
SATB барьер записи (G1)
A B C D
GC A
C
![Page 31: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/31.jpg)
SATB барьер записи (G1)
A B C D
GC C
D
![Page 32: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/32.jpg)
SATB барьер записи (G1)
A B C D
GC C
D
Reference queue: B DОчередь ссылок:
![Page 33: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/33.jpg)
SATB барьер записи (G1)
A B C D
GC C
D
![Page 34: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/34.jpg)
SATB барьер записи (G1)
A B C D
GC D
D
![Page 35: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/35.jpg)
SATB барьер записи (G1)
A B C D
GC
Reference queue: B DОчередь ссылок:
![Page 36: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/36.jpg)
SATB барьер записи (G1)
A B C D
GC
Reference queue:
B
D
emptyОчередь ссылок: пусто
![Page 37: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/37.jpg)
“Card marking” барьер записи
[пауза] Сбор корневых ссылок
[фон] Обход графа объектов
[фон] Перемаркирова “грязных” страниц
[паузa] Финальная перемаркирова
![Page 38: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/38.jpg)
Перемещение объектов
Большинство JVM не может перемещать объекты без STW паузы.
Цель – уменьшение длительности пауз
Параллельная обработка (задействовать все ядра)
Инкрементальное уплотнение (чаще, но короче)
Не уплотнять – опасность фрагментации
![Page 39: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/39.jpg)
Oracle HotSpot
Однопоточный сборщик мусора
-XX:+UseSerialGC
Молодое поколение:
• Сборка копированием
Старое поколение:
• Mark Sweep Compact
Возвращает неиспользуемую память ОС после сборки старшего поколения
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
![Page 40: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/40.jpg)
Oracle HotSpot
Параллельный сборщик мусора
-XX:+UseParallelGC –XX:+UseParallelOldGC
Молодое поколение:
• Многопоточная сборка копированием
Старое поколение:
• Многопоточный Mark Sweep Compact
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
![Page 41: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/41.jpg)
Oracle HotSpot
Фоновый сборщик мусора
-XX:+UseConcMarkSweepGC
Молодое поколение:
• Одно или многопоточная сборка копированием
Старое поколение:
• Фоновая Mark Sweep сборка
Не перемещает объекты в старом поколении при сборке в фоновом режиме
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
![Page 42: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/42.jpg)
Oracle HotSpot
Фоновый сборщик мусора
-XX:+UseG1GC
Молодое поколение:
• Многопоточная сборка копированием
Старое поколение:
• Инкрементальная многопоточная сборка копированием
Возвращает не используемую память ОС
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
![Page 43: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/43.jpg)
Oracle’s HotSpot JVM
Young collector Old collector JVM option
Serial (DefNew) Serial Mark-Sweep-Compact -XX:+UseSerialGC
Parallel scavenge (PSYoungGen) Serial Mark-Sweep-Compact (PSOldGen) -XX:+UseParallelGC
Parallel scavenge (PSYoungGen) Parallel Mark-Sweep-Compact (ParOldGen) -XX:+UseParallelOldGC
Serial (DefNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC
-XX:-UseParNewGC
Parallel (ParNew) Concurrent Mark Sweep -XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
G1 -XX:+UseG1GC
http://blog.ragozin.info/2011/09/hotspot-jvm-garbage-collection-options.html
![Page 44: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/44.jpg)
Oracle JRockit
-Xgc: option Generational Mark Sweep/Compact
genconcon or gencon Yes concurrent incremental
singleconcon or singlecon No concurrent incremental
genconpar Yes concurrent parallel
singleconpar No concurrent parallel
genparpar or genpar Yes parallel parallel
singleparpar or singlepar No parallel parallel
genparcon Yes parallel incremental
singleparcon No parallel incremental
http://blog.ragozin.info/2011/07/jrockit-gc-in-action.html
![Page 45: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/45.jpg)
IBM J9
-Xgcpolicy:optthruput
Одно поколение, stop-the-world сборщик
-Xgcpolicy:optavgpause
Одно поколение, частично конкурентный сборщик
-Xgcpolicy:gencon
Два поколения, частично конкурентный сборщик
![Page 46: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/46.jpg)
Azul Zing
• Два поколения
• Молодое поколение – конкурентный mark-sweep-compact (MSC)
• Старое поколение – конкурентный mark-sweep-compact (MSC)
Azul Zing выполняет перемещение объектов (уплотнение памяти) без останова приложения. Ни одна из фаз сборки мусора не требует STW паузы.
Секрет – read barrier (барьер чтения).
![Page 47: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/47.jpg)
Масштабируемость JVM
Может ли JVM работать с большим объёмом памяти (16GiB и более) без “фризов”?
Ответ да, если приложение удовлетворяет постулатам гипотезы о поколениях.
![Page 48: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/48.jpg)
Рецепт работы без пауз
• HotSpot JVM
• CMS (Concurrent Mark Sweep) сборщик мусора
• Тюнинг
Результат
• Паузы не более 150ms на 32GiB кучи
![Page 49: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/49.jpg)
HotSpot CMS сборщик
Сборка молодого поколения копированием
Не перемещает объекты в старом поколении
Статистические методы борьбы с фрагментацией
Две дополнительные STW фазы
initial-mark, remark
Вся остальная работа происходит в фоне
![Page 50: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/50.jpg)
Длительность пауз CMS сборщика
Young collection
Scan thread stacks
Scan dirty cards
Read card table
Scan dirty
pages
Copy live
objects
Initial mark
Scan thread stacks
Scan young space
Remark
Scan thread stacks
Scan young space
Scan dirty cards
Read card table
Scan dirty
pages
![Page 51: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/51.jpg)
CMS и фрагментация памяти
CMS не перемещает объекты в старшем поколении.
CMS использует отдельные списки свободного места (FSL) для каждого размера выделяемого блока.
Профилактика фрагментации:
• увеличение размера кучи
• более частые циклы сборки
• HotSpot JVM версии 6u26 и старше
![Page 52: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/52.jpg)
Советы по настройке CMS
Настройка CMS на большом объёме кучи • -XX:MaxNewSize= ? – размер молодого поколения
• -XX:CMSWaitDuration= ?
• -XX:-CMSConcurrentMTEnabled – защита от бага в JVM
• -XX:+UseCMSInitiatingOccupancyOnly
• -XX:+CMSClassUnloadingEnabled – если действительно нужно
• -XX:ParGCCardsPerStrideChunk= ? – если куча больше 16 GiB
• JVM 1.6u26 или более поздняя
• плюс логирование GC
![Page 53: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/53.jpg)
Другие причины пауз
• Свопинг ОС
• Обработка ссылок (weak, soft, phantom, JNI)
• Объекты требующие “финализации”
• JNI, native код может блокировать GC
• Проблемы с permanent generation
![Page 54: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/54.jpg)
HotSpot G1
G1 (Garbage First) – новый алгоритм в последних версия HotSpot JVM
Решит ли он проблему пауз?
![Page 55: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/55.jpg)
Можно лучше – OpenJDK патч
http://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html
RFE-7068625
![Page 56: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/56.jpg)
ИТОГ: Сборка мусора в JVM
Сборка мусора не чёрная магия
Каждое приложение индивидуально
Приложение не должно мешать сборщику мусора
JVM может работать “почти” без пауз (с паузами не более 100-200ms)
Автоматическое управление памятью не универсально (Проблемные приложения: HBase, Cassandra, …)
![Page 57: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/57.jpg)
Альтернативы
java.nio.ByteBuffer.allocateDirect()
Достоиства • Память выделяется вне кучи
• Память освобождается автоматически (через ByteBuffer объект)
• Кроссплатформенность, “чистая Java”
Недостатки • Фрагментация памяти вне кучи
• Память освобождается автоматически (через ByteBuffer объект)
• Усложняет многопоточное программирование
• -XX:MaxDirectMemorySize=<value>
![Page 58: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/58.jpg)
Альтернативы
Real Time System Java Иерархия регионов памяти
• Объекты выделяются в выбранном регионе
• Локальные и “бессмертные” регионы не собираются
• Локальные регионы освобождаются целиком
• Глобальные объекты не могу ссылаться на локальные
![Page 59: Секреты сборки мусора в Java [DUMP-IT 2012]](https://reader033.vdocuments.pub/reader033/viewer/2022050906/55613ca2d8b42aa2118b5574/html5/thumbnails/59.jpg)
Альтернативы
Unsafe Java™
sun.misc.Unsafe
• Unsafe.allocateMemory(…)
• Unsafe.reallocateMemory(…)
• Unsafe.freeMemory(…)