SlideShare a Scribd company logo
Секреты сборки мусора в  Java Алексей Рагозин [email_address]
О чём этот доклад? Обзор проблемы автоматического управления памятью Stop-the-world  паузы – причины Сборка мусора в современных  JVM
Сборка мусора Языки использующие автоматическое управление памятью Java, JavaScript, Erlang, Haskell, Python, PHP, C#, Ruby, Perl, SmallTalk, OCaml, List, Scala, ML, Go,   D, … …  and counting Языки   не использующие   автоматическое   управление   памятью C, C++, Pascal/Delphi, Objective-C Что я забыл ?
Способы сборки мусора Мусор – структура данных (объект) в памяти не достижимый из программного кода. Подсчёт ссылок Транзитивное замыкание ссылок   Вообще не собирать
Подсчёт ссылок Просто Не требует пауз для сбора мусора Не очищает циклические графы Дополнительные 15-30% нагрузки  CPU Плохо сочетается с много поточностью
Транзитивное замыкание ссылок Корневой набор ссылок Статические переменные Локальные переменные Объекты достижимые из корневых ссылок – живые Объекты недостижимые из корневых ссылок – мусор В общем случае ,  граф объектов не должен меняться по мере обхода. Следовательно ,  приложение должно быть остановлено пока идёт сборка мусора .
Алгоритмы сборки мусора Mark-Sweep-Compact Фаза 1 – маркировка достижимых объектов Фаза 2 –  “ вычистка ”  мусора Copy collector ( сборка копированием) Использует две области памяти, но выполняется в один проход Mark - Sweep - Compact Mark-Sweep +  перемещение живых объектов
Трёх цветная маркировка
Трёх цветная маркировка
Трёх цветная маркировка
Трёх цветная маркировка
Сборка копированием
Сборка копированием
Сборка копированием
Сборка копированием
Сборка копированием
Сборка копированием
Экономика сборки мусора S  –  объём кучи L  –  объём живых объектов Copy collection Эффективность Mark - Sweep Эффективность   Объём мусора в куче
Слабая гипотеза о поколениях Постулаты Большинство объектов умирают молодыми Число ссылок на молодые объекты мало Следствие Если хранить молодые и старые объекты отдельно, можно обеспечить высокую пропускную способность (молодое поколение) и эффективное использование памяти (старое поколение) .
Демография объектов в куче
Generational collection Молодое поколение Сборщик настроен на пропускную способность Старое поколение Сборщик настроен на эффективное использование памяти Продвижение ( promotion)  объектов в старое поколение Сборщик молодого поколения копирует живые объекты в старое поколение после достижения  “ зрелого ”  возраста
Generational collection Как получить все указатели из старого поколения на молодое? Ответ -  write barrier   Каждый раз при записи указателя в память в  “ старом ”  пространстве, срабатывает барьер
Молодая сборка  HotSpot JVM Сбор  “ корневых ”  ссылок
Молодая сборка  HotSpot JVM Копирование живых объектов
Молодая сборка  HotSpot JVM Сборка закончена Области памяти ,  не помеченные в таблице карт ,   не могут содержать ссылки на молодое поколение
Stop-the-world  паузы Изменение графа объектов во время обхода может привести к пропуску достижимых объектов Большинство  managed runtimes  может перемещать объекты только в режиме паузы
Stop-the-world  паузы Параллельные  (parallel)  алгоритмы Используют несколько потоков чтобы сократить время пауз Конкурентные ( concurrent)  алгоритмы Выполняют большую часть работы в фоновом режиме (без  STW  пауз) Инкрементальные алгоритмы Много маленьких  STW  вместо одной длитетьной
Concurrent marking Проблема Граф объектов меняется по мере обхода  * *  Даже в функциональных языках могут выполняться отложенные вычисления ,  меняющие граф Решение write-barrier –  отслеживать ссылки изменившиеся за время обхода
Concurrent marking Card marking write barrier HotSpot CMS, JRockit, IBM J9 Snapshot-at-the-beginning  (SATB) write barrier HotSpot G1 Read barrier  ( помечать объекты как живые при чтении) Azul Zing JVM
SATB write barrier (G1)
SATB write barrier (G1)
STAB write barrier (G1)
STAB write barrier (G1)
SATB write barrier (G1)
SATB write barrier (G1)
SATB write barrier (G1)
Card marking write barrier [ пауза ]  Сбор корневых ссылок [ фон ]  Обход графа объектов [ фон ]  Перемаркирова  “ грязных ”  страниц [ пауз a]  Финальная перемаркирова
Перемещение объектов Большинство  JVM  не могут перемещать объекты без  STW  паузы.  Цель – уменьшение длительности пауз Параллельная обработка (задействовать все ядра) Инкрементальное уплотнение (чаще ,  но короче) Не уплотнять – опасность фрагментации
Oracle HotSpot Default (serial) collector Young:  Serial copy collector,  Old:  serial MSC Parallel scavenge / Parallel old GC Young:  Parallel copy collector,  Old:  serial MSC or parallel MSC Concurrent mark sweep (CMS) Young:  Serial or parallel copy collector,  Old:  concurrent mark sweep G1 (garbage first) Young:  Copy collector (region based)  Old:  Incremental MSC http://aragozin.blogspot.com/2011/0 9 /hotspot-jvm-garbage-collection-options.html
Oracle’s HotSpot JVM http://aragozin.blogspot.com/2011/0 9 /hotspot-jvm-garbage-collection-options.html
Oracle JRockit http:// aragozin.blogspot.com/2011/07/jrockit-gc-in-action.html -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
IBM J9 -Xgcpolicy:optthruput  Одно поколение , stop-the-world  сборщик -Xgcpolicy:optavgpause Одно поколение ,  частично   конкурентный сборщик -Xgcpolicy:gencon Два поколения, частично конкурентный сборщик
Azul Zing Два поколения Молодое поколение  –  конкурентный  mark-sweep-compact (MSC) Старое   поколение  –  конкурентный  mark-sweep-compact (MSC) Azul   Zing  выполняет перемещение объектов (уплотнение памяти) без останова приложения. Ни одна из фаз сборки мусора не требует  STW  паузы .  Секрет –   read barrier.
Масштабируемость  JVM Может ли  JVM  работать с большим объёмом памяти  (16GiB  и более) без  “ фризов ”? Ответ  да , если приложение удовлетворяет постулатам гипотезы о поколениях.
Рецепт работы без пауз HotSpot JVM CMS  ( Concurrent Mark Sweep)  сборщик мусора Тюнинг Результат Паузы не более 150 ms  на 32 GiB  хипа
HotSpot CMS  сборщик Сборка молодого поколения копированием Не перемещает объекты в старом поколении Статистические методы борьбы с фрагментацией Две дополнительные  STW  фазы initial-mark, remark Вся остальная работа происходит в фоне
Длительность пауз  CMS  сборщика
Можно лучше –  OpenJDK  патч http://aragozin.blogspot.com/2011/07/openjdk-patch-cutting-down-gc-pause.html
Сборка мусора в  JVM Сборка мусора  не  чёрная магия Каждое приложение  индивидуально Приложение  не должно мешать  сборщику мусора JVM  может работать  без пауз   (с паузами не более 100 -200ms) Автоматическое управление памятью  не универсально (Проблемные приложения :   HBase, Cassandra)
Альтернативы java.nio.ByteBuffer.allocateDirect() Pro Memory is allocated out of heap Memory is deallocated when  ByteBuffer  is collected Cross platform, native java Con Fragmentation of non-heap memory Memory is deallocated when  ByteBuffer  is collected Complicated multi thread programming -XX:MaxDirectMemorySize=<value>
Альтернативы Real Time System Java Иерархия регионов памяти Объекты выделяются в выбранном регионе Локальные и  “ бессмертные ”  регионы не собираются Локальные регионы освобождаются целиком Глобальные объекты не могу ссылаться на локальные
Альтернативы Unsafe java sun.misc.Unsafe Unsafe.allocateMemory(…) Unsafe.reallocateMemory(…) Unsafe.freeMemory(…)
Спасибо Алексей Рагозин   [email_address] http://aragozin.blogspot.com -  мои статьи о  JVM  и не только

More Related Content

PDF
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
PPTX
Expert Java Day: Java concurrency
PPT
Секреты сборки мусора в Java
PDF
Секреты сборки мусора в Java [DUMP-IT 2012]
PDF
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
PPTX
Алексей Рагозин (Deutsche Bank)
PDF
WebCamp 2016: Python.Максим Климишин.Типизированный Python
PPT
DUMP-2012 - Только хардкор! - "Секреты сборки мусора в Java" Алексей Рагозин
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
Expert Java Day: Java concurrency
Секреты сборки мусора в Java
Секреты сборки мусора в Java [DUMP-IT 2012]
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
Алексей Рагозин (Deutsche Bank)
WebCamp 2016: Python.Максим Климишин.Типизированный Python
DUMP-2012 - Только хардкор! - "Секреты сборки мусора в Java" Алексей Рагозин

What's hot (20)

PDF
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
PDF
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
PDF
Константин Осипов
PDF
Cборка мусора в Java без пауз (HighLoad++ 2013)
PPTX
Управление памятью в CPython
PDF
libfpta: в памяти, с персистентностью, быстрее хайпа
PDF
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
PDF
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
PDF
20100307 virtualization igotti_lecture04
PDF
PostgreSQL Vacuum: Nine Circles of Hell
PDF
Олег Бартунов и Иван Панченко
PDF
Multithreading in JS. Myth or reality?
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
Другая виртуализация
PDF
Марат Абдуллин "Хроники серверного Жаваскрипта"
PPT
Presentation_1369080393540
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PDF
Алексей Федоров
PDF
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
PPTX
мониторинг производительности приложения на PINBA
JIT-компиляция в виртуальной машине Java (HighLoad++ 2013)
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
Константин Осипов
Cборка мусора в Java без пауз (HighLoad++ 2013)
Управление памятью в CPython
libfpta: в памяти, с персистентностью, быстрее хайпа
Highload на GPU, опыт Vinci / Олег Илларионов (ВКонтакте)
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
20100307 virtualization igotti_lecture04
PostgreSQL Vacuum: Nine Circles of Hell
Олег Бартунов и Иван Панченко
Multithreading in JS. Myth or reality?
Near-realtime аналитика событий в высоконагруженном проекте
Другая виртуализация
Марат Абдуллин "Хроники серверного Жаваскрипта"
Presentation_1369080393540
Ровная балансировка нагрузки на фронтенд-кластере
Алексей Федоров
"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металли...
мониторинг производительности приложения на PINBA
Ad

Similar to Секреты сборки мусора в Java (Алексей Рагозин) (19)

PPTX
Борьба с GС паузами в JVM
PPT
An internal look at HotSpot JVM
PDF
Garbage collection in V8 VM
PPT
Java. Сборщик мусора. Работа с памятью.
PPTX
Performance optimization effective interaction with virtual machine
PPTX
Внутреннее устройство GC
PPTX
Solit 2013, JVM изнутри: оптимизация и профилирование, Слисенко Константин
PDF
Алексей Рагозин
PDF
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
PDF
Насорил - убери!
PDF
Automated Memory Management for C++
PPTX
Dz Java Hi Load 0.4
PPTX
Performance optimization: effective interaction with virtual machine
PDF
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
PDF
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
PDF
Память в Java. Garbage Collector
PDF
Об одной неприятной проблеме сборщика Concurrent Mark-Sweep, Кирилл Голоднов
PDF
Выявление неполадок в Java приложениях
Борьба с GС паузами в JVM
An internal look at HotSpot JVM
Garbage collection in V8 VM
Java. Сборщик мусора. Работа с памятью.
Performance optimization effective interaction with virtual machine
Внутреннее устройство GC
Solit 2013, JVM изнутри: оптимизация и профилирование, Слисенко Константин
Алексей Рагозин
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
Насорил - убери!
Automated Memory Management for C++
Dz Java Hi Load 0.4
Performance optimization: effective interaction with virtual machine
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
Память в Java. Garbage Collector
Об одной неприятной проблеме сборщика Concurrent Mark-Sweep, Кирилл Голоднов
Выявление неполадок в Java приложениях
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Секреты сборки мусора в Java (Алексей Рагозин)

  • 1. Секреты сборки мусора в Java Алексей Рагозин [email_address]
  • 2. О чём этот доклад? Обзор проблемы автоматического управления памятью Stop-the-world паузы – причины Сборка мусора в современных JVM
  • 3. Сборка мусора Языки использующие автоматическое управление памятью Java, JavaScript, Erlang, Haskell, Python, PHP, C#, Ruby, Perl, SmallTalk, OCaml, List, Scala, ML, Go, D, … … and counting Языки не использующие автоматическое управление памятью C, C++, Pascal/Delphi, Objective-C Что я забыл ?
  • 4. Способы сборки мусора Мусор – структура данных (объект) в памяти не достижимый из программного кода. Подсчёт ссылок Транзитивное замыкание ссылок Вообще не собирать
  • 5. Подсчёт ссылок Просто Не требует пауз для сбора мусора Не очищает циклические графы Дополнительные 15-30% нагрузки CPU Плохо сочетается с много поточностью
  • 6. Транзитивное замыкание ссылок Корневой набор ссылок Статические переменные Локальные переменные Объекты достижимые из корневых ссылок – живые Объекты недостижимые из корневых ссылок – мусор В общем случае , граф объектов не должен меняться по мере обхода. Следовательно , приложение должно быть остановлено пока идёт сборка мусора .
  • 7. Алгоритмы сборки мусора Mark-Sweep-Compact Фаза 1 – маркировка достижимых объектов Фаза 2 – “ вычистка ” мусора Copy collector ( сборка копированием) Использует две области памяти, но выполняется в один проход Mark - Sweep - Compact Mark-Sweep + перемещение живых объектов
  • 18. Экономика сборки мусора S – объём кучи L – объём живых объектов Copy collection Эффективность Mark - Sweep Эффективность Объём мусора в куче
  • 19. Слабая гипотеза о поколениях Постулаты Большинство объектов умирают молодыми Число ссылок на молодые объекты мало Следствие Если хранить молодые и старые объекты отдельно, можно обеспечить высокую пропускную способность (молодое поколение) и эффективное использование памяти (старое поколение) .
  • 21. Generational collection Молодое поколение Сборщик настроен на пропускную способность Старое поколение Сборщик настроен на эффективное использование памяти Продвижение ( promotion) объектов в старое поколение Сборщик молодого поколения копирует живые объекты в старое поколение после достижения “ зрелого ” возраста
  • 22. Generational collection Как получить все указатели из старого поколения на молодое? Ответ - write barrier Каждый раз при записи указателя в память в “ старом ” пространстве, срабатывает барьер
  • 23. Молодая сборка HotSpot JVM Сбор “ корневых ” ссылок
  • 24. Молодая сборка HotSpot JVM Копирование живых объектов
  • 25. Молодая сборка HotSpot JVM Сборка закончена Области памяти , не помеченные в таблице карт , не могут содержать ссылки на молодое поколение
  • 26. Stop-the-world паузы Изменение графа объектов во время обхода может привести к пропуску достижимых объектов Большинство managed runtimes может перемещать объекты только в режиме паузы
  • 27. Stop-the-world паузы Параллельные (parallel) алгоритмы Используют несколько потоков чтобы сократить время пауз Конкурентные ( concurrent) алгоритмы Выполняют большую часть работы в фоновом режиме (без STW пауз) Инкрементальные алгоритмы Много маленьких STW вместо одной длитетьной
  • 28. Concurrent marking Проблема Граф объектов меняется по мере обхода * * Даже в функциональных языках могут выполняться отложенные вычисления , меняющие граф Решение write-barrier – отслеживать ссылки изменившиеся за время обхода
  • 29. Concurrent marking Card marking write barrier HotSpot CMS, JRockit, IBM J9 Snapshot-at-the-beginning (SATB) write barrier HotSpot G1 Read barrier ( помечать объекты как живые при чтении) Azul Zing JVM
  • 37. Card marking write barrier [ пауза ] Сбор корневых ссылок [ фон ] Обход графа объектов [ фон ] Перемаркирова “ грязных ” страниц [ пауз a] Финальная перемаркирова
  • 38. Перемещение объектов Большинство JVM не могут перемещать объекты без STW паузы. Цель – уменьшение длительности пауз Параллельная обработка (задействовать все ядра) Инкрементальное уплотнение (чаще , но короче) Не уплотнять – опасность фрагментации
  • 39. Oracle HotSpot Default (serial) collector Young: Serial copy collector, Old: serial MSC Parallel scavenge / Parallel old GC Young: Parallel copy collector, Old: serial MSC or parallel MSC Concurrent mark sweep (CMS) Young: Serial or parallel copy collector, Old: concurrent mark sweep G1 (garbage first) Young: Copy collector (region based) Old: Incremental MSC http://aragozin.blogspot.com/2011/0 9 /hotspot-jvm-garbage-collection-options.html
  • 40. Oracle’s HotSpot JVM http://aragozin.blogspot.com/2011/0 9 /hotspot-jvm-garbage-collection-options.html
  • 41. Oracle JRockit http:// aragozin.blogspot.com/2011/07/jrockit-gc-in-action.html -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
  • 42. IBM J9 -Xgcpolicy:optthruput Одно поколение , stop-the-world сборщик -Xgcpolicy:optavgpause Одно поколение , частично конкурентный сборщик -Xgcpolicy:gencon Два поколения, частично конкурентный сборщик
  • 43. Azul Zing Два поколения Молодое поколение – конкурентный mark-sweep-compact (MSC) Старое поколение – конкурентный mark-sweep-compact (MSC) Azul Zing выполняет перемещение объектов (уплотнение памяти) без останова приложения. Ни одна из фаз сборки мусора не требует STW паузы . Секрет – read barrier.
  • 44. Масштабируемость JVM Может ли JVM работать с большим объёмом памяти (16GiB и более) без “ фризов ”? Ответ да , если приложение удовлетворяет постулатам гипотезы о поколениях.
  • 45. Рецепт работы без пауз HotSpot JVM CMS ( Concurrent Mark Sweep) сборщик мусора Тюнинг Результат Паузы не более 150 ms на 32 GiB хипа
  • 46. HotSpot CMS сборщик Сборка молодого поколения копированием Не перемещает объекты в старом поколении Статистические методы борьбы с фрагментацией Две дополнительные STW фазы initial-mark, remark Вся остальная работа происходит в фоне
  • 47. Длительность пауз CMS сборщика
  • 48. Можно лучше – OpenJDK патч http://aragozin.blogspot.com/2011/07/openjdk-patch-cutting-down-gc-pause.html
  • 49. Сборка мусора в JVM Сборка мусора не чёрная магия Каждое приложение индивидуально Приложение не должно мешать сборщику мусора JVM может работать без пауз (с паузами не более 100 -200ms) Автоматическое управление памятью не универсально (Проблемные приложения : HBase, Cassandra)
  • 50. Альтернативы java.nio.ByteBuffer.allocateDirect() Pro Memory is allocated out of heap Memory is deallocated when ByteBuffer is collected Cross platform, native java Con Fragmentation of non-heap memory Memory is deallocated when ByteBuffer is collected Complicated multi thread programming -XX:MaxDirectMemorySize=<value>
  • 51. Альтернативы Real Time System Java Иерархия регионов памяти Объекты выделяются в выбранном регионе Локальные и “ бессмертные ” регионы не собираются Локальные регионы освобождаются целиком Глобальные объекты не могу ссылаться на локальные
  • 52. Альтернативы Unsafe java sun.misc.Unsafe Unsafe.allocateMemory(…) Unsafe.reallocateMemory(…) Unsafe.freeMemory(…)
  • 53. Спасибо Алексей Рагозин [email_address] http://aragozin.blogspot.com - мои статьи о JVM и не только