Cборка мусора в Java без пауз (HighLoad++ 2013)aragozin
Доклад про паузы при сборке мусора уже был на одной из прошлых конференций HighLoad++.
Паузы stop-the-world являются неотъемлемым атрибутом автоматического управления памятью.
Или всё-таки их можно избежать? – Можно!
Алгоритмы, не требующие пауз для управления памятью, существуют. Существуют и реальные JVM, которые их реализуют.
Содержание доклада
- Принципы автоматического управления памятью (сборки мусора).
- "Метроном" - классический алгоритм сборки мусора без пауз.
- С4 - алгоритм сборки мусора Zing JVM (Azul Systems).
- Особенности эффективной реализации на x86-архитектуре.
- Дополнительные источники проблем: слабые ссылки, фрагментация и прочее.
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решенияFProg
В докладе рассматривается мотивация и опыт перехода процесса разработки API с большим количеством внутренней логики с Python на сочетание Erlang и Haskell, проблемы в процессе разработки и способы их решения.
Презентация с Highload++ 2011
---
Принципы работы сборщика мусора в JVM. Использование принципа поколений. Параллельная и фоновая сборка мусора. Особенности реализации алгоритмов сборки мусора в HostSpot и JRockit JVM. Причины пауз сборки мусора и способы борьбы с ними. Особенности работы с "большими" JVM - 32 гигабайта и больше. Альтернативы сборщике мусора, прямое управление памятью в Java.
Марат Абдуллин "Хроники серверного Жаваскрипта"
Я.Субботник в Санкт-Петербурге
О докладе:
Все еще используешь LAMP?! Прототипная парадигма объектно-ориентированного программирования! Наш SERP написан на PHP4! We put a function in your function, so you can call your function in a function call.
Este documento describe una pizarra digital, que combina las funciones de una pizarra tradicional con las de un ordenador y proyector. Permite proyectar contenidos digitales de forma interactiva para grupos y escribir directamente sobre la superficie. Su uso en educación requiere nuevas habilidades de profesores y alumnos, aumenta la participación y atención de los estudiantes, y facilita la enseñanza a una diversidad de aprendices. Las pizarras digitales se utilizan para tareas como hojas de cálculo, procesamiento
The new Ponderosa Fire Department Station #62 was unveiled to the community. The 11,163 square foot facility replaces the aging Station #2 and features sleeping quarters for 11 firefighters, three drive-through apparatus bays, a kitchen/dining area, and training facilities. The state-of-the-art design from Brown Reynolds Watford Architects prioritizes quick response times and utilizes durable materials. LDF Construction completed the project on time and to the high standards of the fire department. The new station will aid the department in serving the 13 square mile area and nearly 48,000 residents.
This document provides an autobiographical summary of Nicole Elam's life, including details about her hometown of Irvine, CA, her education history in Irvine, some of her travels to Hawaii, Mexico, Washington D.C., and the western U.S., her current job and past jobs including babysitting and typing, her favorite activities and sports, her family history and ethnic background, and photos related to these different sections of her life.
Este documento analiza la relación entre el PBI real de Puerto Rico y el PBI real de Estados Unidos. Los resultados muestran que existe una relación de largo plazo entre las economías, con el PBI real de Puerto Rico respondiendo en un 4% a cambios permanentes en el PBI real de EE.UU. También hay una relación de corto plazo, con el PBI real de Puerto Rico respondiendo en un 1.8% a cambios transitorios en EE.UU. Esto sugiere que las economías comparten tendencias y ciclos económicos comunes.
The document provides a daily calorie burning target and meal suggestions for weekdays and weekends to lose 200 grams or 180 calories by the end of the day. It tracks calorie consumption and suggests taking a walk or break to meet the daily calorie burning goal. The health guide section displays water level, sugar level, blood pressure, body mass index, and percentage of body fat.
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
MyRocks: табличный движок для MySQL на основе RocksDB.
Презентация с HighLoad++ 2015.
Рассказывается о принципах работы LSM-Trees, их реализации в RocksDB, зачем и как был сделан MyRocks, с какими проблемами столкнулись и как их решили.
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
Facebook использует MySQL в качестве основного хранилища данных. MySQL работает на десятках тысяч серверов в нескольких ЦОДах. В качестве дисков используются Flash-накопители. Они дают большую производительность, но дорогой ценой — MySQL хранит данные на диске в структуре B-tree, которая использует flash-диск неоптимальным образом. В масштабах Facebook'a цена вопроса измеряется миллионами долларов.
Для оптимального использования Flash-дисков в Facebook была разработана библиотека RocksDB. Она основана на LSM-деревьях и оптимизирована для работы в условиях высокой загрузки. Чтобы использовать ее из MySQL, [совместно с MariaDB] был разработан табличный движок — MyRocks.
Данный доклад посвящен RocksDB и MyRocks. Мы расскажем о принципах их работы и преимуществах, как их настраивать, и какие возможны подводные камни.
Авторы доклада — ведущие разработчики MyRocks от Facebook и MariaDB.
RocksDB и MyRocks доступны на GitHub для свободного использования, участие в разработке также приветствуется.
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
Мы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
Всем известно о существовании временных таблиц в PostgreSQL, но как они устроены, и чем грозит их некорректное использование - не столь очевидно.
На примере одного известного приложения, активно и некорректно использующего временные таблицы, мы расскажем о создаваемой ими проблеме фрагментации памяти.
Что такое фрагментация памяти, по каким признакам можно определить ее наличие, чем она грозит, почему она возникает при активном использовании временных таблиц, и как мы пропатчили PostgreSQL, чтобы ее избежать - обо всем этом можно узнать из нашего доклада.
Сергій Комлач
— Android розробник в Sticky Password (Чехія).
— Головні напрямки роботи — біометрична ідентифікація, кібер-безпека, кросс-платформенні рішення.
— Досвід у сфері розробки під Мобайл понад 8 років.
— Переможець Opera Mobile Store Awards.
— Спікер та учасник: Lviv Mobile Development Day, UAMobile, Frameworks Day Android, Code'n'Coffee Khmelnitsky, Google DevFest UA.
— Засновник та лідер Google Developers Group Kremenchuk.
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
Este documento describe una pizarra digital, que combina las funciones de una pizarra tradicional con las de un ordenador y proyector. Permite proyectar contenidos digitales de forma interactiva para grupos y escribir directamente sobre la superficie. Su uso en educación requiere nuevas habilidades de profesores y alumnos, aumenta la participación y atención de los estudiantes, y facilita la enseñanza a una diversidad de aprendices. Las pizarras digitales se utilizan para tareas como hojas de cálculo, procesamiento
The new Ponderosa Fire Department Station #62 was unveiled to the community. The 11,163 square foot facility replaces the aging Station #2 and features sleeping quarters for 11 firefighters, three drive-through apparatus bays, a kitchen/dining area, and training facilities. The state-of-the-art design from Brown Reynolds Watford Architects prioritizes quick response times and utilizes durable materials. LDF Construction completed the project on time and to the high standards of the fire department. The new station will aid the department in serving the 13 square mile area and nearly 48,000 residents.
This document provides an autobiographical summary of Nicole Elam's life, including details about her hometown of Irvine, CA, her education history in Irvine, some of her travels to Hawaii, Mexico, Washington D.C., and the western U.S., her current job and past jobs including babysitting and typing, her favorite activities and sports, her family history and ethnic background, and photos related to these different sections of her life.
Este documento analiza la relación entre el PBI real de Puerto Rico y el PBI real de Estados Unidos. Los resultados muestran que existe una relación de largo plazo entre las economías, con el PBI real de Puerto Rico respondiendo en un 4% a cambios permanentes en el PBI real de EE.UU. También hay una relación de corto plazo, con el PBI real de Puerto Rico respondiendo en un 1.8% a cambios transitorios en EE.UU. Esto sugiere que las economías comparten tendencias y ciclos económicos comunes.
The document provides a daily calorie burning target and meal suggestions for weekdays and weekends to lose 200 grams or 180 calories by the end of the day. It tracks calorie consumption and suggests taking a walk or break to meet the daily calorie burning goal. The health guide section displays water level, sugar level, blood pressure, body mass index, and percentage of body fat.
MyRocks: табличный движок для MySQL на основе RocksDBSergey Petrunya
MyRocks: табличный движок для MySQL на основе RocksDB.
Презентация с HighLoad++ 2015.
Рассказывается о принципах работы LSM-Trees, их реализации в RocksDB, зачем и как был сделан MyRocks, с какими проблемами столкнулись и как их решили.
MyRocks Табличный Движок для MySQL / Алексей Майков (Facebook) / Сергей Петру...Ontico
Facebook использует MySQL в качестве основного хранилища данных. MySQL работает на десятках тысяч серверов в нескольких ЦОДах. В качестве дисков используются Flash-накопители. Они дают большую производительность, но дорогой ценой — MySQL хранит данные на диске в структуре B-tree, которая использует flash-диск неоптимальным образом. В масштабах Facebook'a цена вопроса измеряется миллионами долларов.
Для оптимального использования Flash-дисков в Facebook была разработана библиотека RocksDB. Она основана на LSM-деревьях и оптимизирована для работы в условиях высокой загрузки. Чтобы использовать ее из MySQL, [совместно с MariaDB] был разработан табличный движок — MyRocks.
Данный доклад посвящен RocksDB и MyRocks. Мы расскажем о принципах их работы и преимуществах, как их настраивать, и какие возможны подводные камни.
Авторы доклада — ведущие разработчики MyRocks от Facebook и MariaDB.
RocksDB и MyRocks доступны на GitHub для свободного использования, участие в разработке также приветствуется.
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
Мы проговорим про связь приложения и ОС, какие компоненты есть в современной ОС на примере Linux, как настройки этих компонент могут повлиять на приложение.
Я расскажу про планировщик процессов, дисковый и сетевой ввод-вывод и соответствующие планировщики, управление памятью - как это все в общих чертах работает и как его потюнить.
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
Всем известно о существовании временных таблиц в PostgreSQL, но как они устроены, и чем грозит их некорректное использование - не столь очевидно.
На примере одного известного приложения, активно и некорректно использующего временные таблицы, мы расскажем о создаваемой ими проблеме фрагментации памяти.
Что такое фрагментация памяти, по каким признакам можно определить ее наличие, чем она грозит, почему она возникает при активном использовании временных таблиц, и как мы пропатчили PostgreSQL, чтобы ее избежать - обо всем этом можно узнать из нашего доклада.
Сергій Комлач
— Android розробник в Sticky Password (Чехія).
— Головні напрямки роботи — біометрична ідентифікація, кібер-безпека, кросс-платформенні рішення.
— Досвід у сфері розробки під Мобайл понад 8 років.
— Переможець Opera Mobile Store Awards.
— Спікер та учасник: Lviv Mobile Development Day, UAMobile, Frameworks Day Android, Code'n'Coffee Khmelnitsky, Google DevFest UA.
— Засновник та лідер Google Developers Group Kremenchuk.
Доклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
This talk about how android developers can use sun.misc.Unsafe for boost their app speed with direct access to sandbox memory and to understand how android allocates memory and works with serialization, concurrency and reflection.
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
- Scrapy is a framework for web scraping that allows for extraction of structured data from HTML/XML through selectors like CSS and XPath. It provides features like an interactive shell, feed exports, encoding support, and more.
- Scrapy is built on top of the Twisted asynchronous networking framework, which provides an event loop and deferreds. It handles protocols and transports like TCP, HTTP, and more across platforms.
- Scrapy architecture includes components like the downloader, scraper, and item pipelines that communicate internally. Flow control is needed between these to limit memory usage and scheduling through techniques like concurrent item limits, memory limits, and delays between calls.
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
The document discusses debugging in Python 3.6. It describes tracing and frame evaluation debuggers. Tracing debuggers slow code execution significantly by calling the tracing function on every line. Python 3.6 introduced a new frame evaluation API that allows evaluating frames directly, avoiding the performance issues of tracing. The document demonstrates how to build a debugger using this approach, including setting breakpoints and stepping through code by inserting temporary breakpoints on each line. Frame evaluation allows building a debugger that is faster than tracing debuggers without significant performance penalties.
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
Gevent is a concurrency library for Python that uses greenlets, or lightweight coroutines, to provide asynchronous operations and non-blocking I/O. It allows developing highly concurrent applications using a simple and familiar synchronous style. The document compares gevent to other concurrency options like asyncio and discusses how it provides features like asynchronous task execution, event loops, and inter-greenlet communication using queues and callbacks.
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
The document discusses what serverless computing is and how it can be used for building applications. Serverless applications rely on third party services to manage server infrastructure and are event-triggered. Popular serverless frameworks like AWS Lambda, Google Cloud Functions, Microsoft Azure Functions, and Zappa allow developers to write code that runs in a serverless environment and handle events and triggers without having to manage servers.
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
The document describes a talk on optimizing Python performance through just-in-time compilation. It discusses how the CPython interpreter works by evaluating bytecode through an evaluation loop. It then talks about how PyPy achieves faster performance through jit compilation of hot loops detected via tracing. The talk dives into the RPython language used to implement PyPy and shows an example of compiling a small Python program to C with RPython. It also discusses using partial evaluation to specialize an interpreter for constant inputs.
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
The document appears to be a transcript of Python code being executed in an interactive Python shell. It contains examples testing the behavior of built-in functions and operators like sorted(), reversed(), isinstance(), sum(), float("nan"), is, min(), and comparisons like ==, <, on various data types including lists, tuples, and dictionaries.
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
The document discusses various security vulnerabilities in Python web applications. It begins with an overview of the OWASP Top 10 security risks, with sections focusing on risks related to using components with known vulnerabilities (A9) and insufficient attack protection (A7). For A9, it provides examples of vulnerabilities in popular Python packages and recommends checking changelogs and vulnerability databases. For A7, it recommends implementing attack protections like login attempts logging, rate limiting, and use of a web application firewall. The document also covers security misconfiguration (A5), giving examples like using default settings in production and exposing tracebacks.
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
The document discusses best practices for writing tests in Swift, including recommendations to:
- Write clean, readable tests that focus on asserting a single truth
- Use a domain-specific language in tests for clarity
- Structure tests with "given-when-then"
- Mock dependencies through protocols to enable test isolation
- Favor partial mocks over fully mocking to limit complexity
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
Фаза 1 – маркировка достижимых объектов
Фаза 2 – “вычистка” мусора
• Copy collector (сборка копированием)
Использует две области памяти, но выполняется в один проход
• Mark-Sweep-Compact
Mark-Sweep + перемещение живых объектов
18. Экономика сборки мусора
S – объём кучи Объём
L – объём живых объектов мусора в куче
Copy collection
S−L
Эффективность ≈ c ⋅
L
Mark-Sweep
S−L S−L
Эффективность ≈ c1 ⋅ + c2 ⋅
L S
19. Слабая гипотеза о поколениях
Постулаты
Большинство объектов умирают молодыми
Число ссылок на молодые объекты мало
Следствие
Если хранить молодые объекты отдельно от старых, можно
обеспечить высокую пропускную способность (молодое
поколение) и эффективное использование памяти (старое
поколение).
20. Демография объектов в куче
Период молодой сборки
Смертность (байт/с)
Период старой сборки
∞
Возраст объектов
21. Generational collection
Молодое поколение
Сборщик настроен на пропускную способность
Старое поколение
Сборщик настроен на эффективное использование памяти
Продвижение (promotion) объектов в старое поколение
Сборщик молодого поколения копирует живые объекты в
старое поколение после достижения “зрелого” возраста
22. Generational collection
Как получить все указатели из старого
поколения на молодое?
Ответ – барьер на запись
Каждый раз при записи указателя в память в
“старом” пространстве, срабатывает барьер
23. Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Scan stack traces
Scan dirty pages in old space
Сбор “корневых” ссылок
24. Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Clean cards
Recursive copy of live objects (only live objects are traversed)
Копирование живых объектов
25. Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Области памяти, не помеченные в таблице карт,
не могут содержать ссылки на молодое поколение
Сборка закончена
26. Stop-the-world паузы
• Изменение графа объектов во время
обхода может привести к пропуску
достижимых объектов
• Большинство managed runtimes может
перемещать объекты только в режиме
паузы
27. Stop-the-world паузы
Параллельные (parallel) алгоритмы
Используют несколько потоков чтобы сократить время пауз
Фоновые (concurrent) алгоритмы
Выполняют большую часть работы в фоновом режиме (без STW пауз)
Инкрементальные алгоритмы
Много маленьких STW вместо одной длительной
28. Фоновая маркировка
Проблема
Граф объектов меняется по мере обхода *
* Даже в функциональных языках могут выполняться
отложенные вычисления, меняющие граф
Решение
барьер на запись – отслеживать ссылки
изменившиеся за время обхода
29. Фоновая маркировка
Card marking write barrier
HotSpot CMS, JRockit, IBM J9
Snapshot-at-the-beginning (SATB) write barrier
HotSpot G1
Альтернатива барьеру на запись – барьер на
чтение
Azul Zing JVM
36. SATB барьер записи (G1)
D
GC B
A B C D
Reference ссылок: пусто
Очередь queue: empty
37. “Card marking” барьер записи
[пауза] Сбор корневых ссылок
[фон] Обход графа объектов
[фон] Перемаркирова “грязных” страниц
[паузa] Финальная перемаркирова
38. Перемещение объектов
Большинство JVM не может перемещать объекты
без STW паузы.
Цель – уменьшение длительности пауз
Параллельная обработка (задействовать все ядра)
Инкрементальное уплотнение (чаще, но короче)
Не уплотнять – опасность фрагментации
39. Oracle HotSpot
Однопоточный сборщик мусора
-XX:+UseSerialGC
Молодое поколение:
• Сборка копированием
Старое поколение:
• Mark Sweep Compact
Возвращает неиспользуемую
память ОС после сборки старшего поколения
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
41. Oracle HotSpot
Фоновый сборщик мусора
-XX:+UseConcMarkSweepGC
Молодое поколение:
• Одно или многопоточная сборка копированием
Старое поколение:
• Фоновая Mark Sweep сборка
Не перемещает объекты в старом поколении при сборке в
фоновом режиме
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
42. Oracle HotSpot
Фоновый сборщик мусора
-XX:+UseG1GC
Молодое поколение:
• Многопоточная сборка копированием
Старое поколение:
• Инкрементальная многопоточная сборка копированием
Возвращает не используемую память ОС
http://aragozin.blogspot.com/2011/09/hotspot-jvm-garbage-collection-options.html
43. 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
44. 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
45. IBM J9
-Xgcpolicy:optthruput
Одно поколение, stop-the-world сборщик
-Xgcpolicy:optavgpause
Одно поколение, частично конкурентный сборщик
-Xgcpolicy:gencon
Два поколения, частично конкурентный сборщик
46. Azul Zing
• Два поколения
• Молодое поколение – конкурентный mark-sweep-compact
(MSC)
• Старое поколение – конкурентный mark-sweep-compact
(MSC)
Azul Zing выполняет перемещение объектов (уплотнение
памяти) без останова приложения. Ни одна из фаз сборки
мусора не требует STW паузы.
Секрет – read barrier (барьер чтения).
47. Масштабируемость JVM
Может ли JVM работать с большим объёмом
памяти (16GiB и более) без “фризов”?
Ответ да, если приложение удовлетворяет
постулатам гипотезы о поколениях.
48. Рецепт работы без пауз
• HotSpot JVM
• CMS (Concurrent Mark Sweep) сборщик
мусора
• Тюнинг
Результат
• Паузы не более 150ms на 32GiB кучи
49. HotSpot CMS сборщик
Сборка молодого поколения копированием
Не перемещает объекты в старом поколении
Статистические методы борьбы с фрагментацией
Две дополнительные STW фазы
initial-mark, remark
Вся остальная работа происходит в фоне
51. CMS и фрагментация памяти
CMS не перемещает объекты в старшем поколении.
CMS использует отдельные списки свободного места (FSL)
для каждого размера выделяемого блока.
Профилактика фрагментации:
• увеличение размера кучи
• более частые циклы сборки
• HotSpot JVM версии 6u26 и старше
52. Советы по настройке CMS
Настройка CMS на большом объёме кучи
• -XX:MaxNewSize= ? – размер молодого поколения
• -XX:CMSWaitDuration= ?
• -XX:-CMSConcurrentMTEnabled – защита от бага в JVM
• -XX:+UseCMSInitiatingOccupancyOnly
• -XX:+CMSClassUnloadingEnabled – если действительно нужно
• -XX:ParGCCardsPerStrideChunk= ? – если куча больше 16 GiB
• JVM 1.6u26 или более поздняя
• плюс логирование GC
53. Другие причины пауз
• Свопинг ОС
• Обработка ссылок (weak, soft, phantom, JNI)
• Объекты требующие “финализации”
• JNI, native код может блокировать GC
• Проблемы с permanent generation
54. HotSpot G1
G1 (Garbage First) – новый алгоритм в
последних версия HotSpot JVM
Решит ли он проблему пауз?
55. Можно лучше – OpenJDK патч
RFE-7068625
http://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html
56. ИТОГ: Сборка мусора в JVM
Сборка мусора не чёрная магия
Каждое приложение индивидуально
Приложение не должно мешать сборщику
мусора
JVM может работать “почти” без пауз
(с паузами не более 100-200ms)
Автоматическое управление памятью не
универсально
(Проблемные приложения: HBase, Cassandra, …)
57. Альтернативы
java.nio.ByteBuffer.allocateDirect()
Достоиства
• Память выделяется вне кучи
• Память освобождается автоматически (через ByteBuffer объект)
• Кроссплатформенность, “чистая Java”
Недостатки
• Фрагментация памяти вне кучи
• Память освобождается автоматически (через ByteBuffer объект)
• Усложняет многопоточное программирование
• -XX:MaxDirectMemorySize=<value>
58. Альтернативы
Real Time System Java
Иерархия регионов памяти
• Объекты выделяются в выбранном регионе
• Локальные и “бессмертные” регионы не собираются
• Локальные регионы освобождаются целиком
• Глобальные объекты не могу ссылаться на локальные