Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
Борьба с GC паузами в JVM
Теория и Практика
Алексей Рагозин, Deutsche Bank
Russia Development Centre
Deutsche Bank
Содержание доклада
Теория
• Алгоритмы • Экономическая модель
• Гипотеза о поколениях • Барьеры записи
• Модель длительности пауз
Практика
• Алгоритмы HotSpot JVM • Concurrent Mark Sweep
• Сайзинг JVM • Фрагментация памяти • Другие проблемы 
Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
ТЕОРИЯ
Russia Development Centre
Deutsche Bank
Терминология
Stop-the-world (STW) pause
– полная заморозка прикладных потоков JVM
Compacting algorithms
– алгоритмыперемещающиеобъектывпамятивоизбежаниефрагментации
Parallel collection
– использование многопоточности для сокращения STW паузы
Concurrent collection
– “фоновая” сбора мусора не требующая STW
Russia Development Centre
Deutsche Bank
Как собрать “мусор”?
 Подсчёт ссылок
 Трассировка ссылок (обход графа)
 А зачем собирать?
Russia Development Centre
Deutsche Bank
Трассирующие алгоритмы
Mark Sweep
• Обойти граф, начиная с “корневых” ссылок
• Отметить живые объекты • Просканировать память и собрать “мусор”
Сборка копированием (copy collector)
• Каждый достижимый объект туже копируется в новую область памяти
• Ссылки на другие объекты корректируются при копировании
Mark Sweep Compact
• Mark Sweep + перемещение объектов в ходе sweep фазы
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
FROM
TO
roots
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
FROM
TO
roots
1
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
FROM
TO
roots
1 2
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
FROM
TO
roots
1 2
Russia Development Centre
Deutsche Bank
Сборка копированием
FROM
TO
roots
FROM
TO
roots
1 23
Russia Development Centre
Deutsche Bank
Экономика сборки мусора
S – объём кучи
L – объём живых объектов
Copy collection
 Эффективность
Mark-Sweep
 Эффективность
L
LS
c
S
LS
c
L
LS
c 21
Объѐм
мусора в
куче
Russia Development Centre
Deutsche Bank
Слабая гипотеза о поколениях
Постулаты
 Большинство объектов умирают молодыми
 Число ссылок на молодые объекты мало
Следствие
Еслихранитьмолодыеобъектыотдельноотстарых,можнообеспечить
высокую пропускную способность (молодое поколение)
и эффективное использование памяти (старое поколение).
Russia Development Centre
Deutsche Bank
Демография объектов в куче
Смертность(байт/с)
Возраст объектов
Период молодой сборки
Период старой сборки
∞
Russia Development Centre
Deutsche Bank
Generational collection
Молодое поколение
 Сборщик настроен на пропускную способность
Старое поколение
 Сборщик настроен на эффективное использование памяти
Продвижение (promotion) объектов в старое поколение
 Сборщик молодого поколения копирует живые объекты в
старое поколение после достижения “зрелого” возраста
Russia Development Centre
Deutsche Bank
Generational collection
Как получить все указатели из старого поколения на молодое?
Ответ – барьер на запись
Каждый раз при записи указателя в память в “старом”
пространстве, срабатывает барьер
Russia Development Centre
Deutsche Bank
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Collect roots for young GC
Scan stack traces
Scan dirty pages in old space
Сбор “корневых” ссылок
Russia Development Centre
Deutsche Bank
Молодая сборка 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)
Копирование живых объектов
Russia Development Centre
Deutsche Bank
Молодая сборка HotSpot JVM
Eden S1 S2 Tenured
Dirty cards
Сборка закончена
Области памяти, не помеченные в таблице карт,
не могут содержать ссылки на молодое поколение
Russia Development Centre
Deutsche Bank
Фоновая маркировка
Проблема
 Граф объектов меняется по мере обхода *
* Даже в функциональных языках могут выполняться
отложенные вычисления, меняющие граф
Решение
 Барьер на запись – отслеживание ссылок изменившихся
за время обхода
Russia Development Centre
Deutsche Bank
Фоновая маркировка
 Card marking write barrier
HotSpot CMS, JRockit, IBM J9
 Snapshot-at-the-beginning (SATB) write barrier
HotSpot G1
 Альтернатива барьерузаписи– барьер на чтении
 Azul Zing JVM
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC A
C
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC C
D
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC C
D
Reference queue: B DОчередь ссылок:
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC C
D
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC D
D
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC
Reference queue: B DОчередь ссылок:
Russia Development Centre
Deutsche Bank
SATB барьер записи (G1)
A B C D
GC
Reference queue:
B
D
emptyОчередь ссылок: пусто
Russia Development Centre
Deutsche Bank
Concurrent Mark Sweep
[пауза] Сбор корневых ссылок
[фон] Обход графа объектов
[фон] Перемаркирова “грязных” страниц
[паузa] Финальная перемаркирова
[фон] Сканирование памяти (sweep)
Russia Development Centre
Deutsche Bank
Длительность паузы (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
Пропорционально размеру
старого поколения
Стремится к константе с ростом
размера старого поколения
Пропорционально размеру
старого поколения
Стремится к константе с ростом
размера старого поколения
Russia Development Centre
Deutsche Bank
Эксперимент
http://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html
Russia Development Centre
Deutsche Bank
Другие компоненты паузы
Время синхронизации в safe point
Ожидание JNI блокировок
Сканирование стека
Обработка ссылок
• Weak • Soft • JNI • Finalizers
Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
Практика
Russia Development Centre
Deutsche Bank
“Боевые” настройки JVM
HotSpot JVM
Concurrent Mark Sweep алгоритм
Сайзинг памяти под приложение
Russia Development Centre
Deutsche Bank
Сайзинг
 -Xmx = -Xms
 -Xmx = размер старого + размер молодого
 -Xmn = размер молодого
 Старое поколение:
 Данные приложения (jmap –histo)
 Запас 30-50% на фоновую сборку и фрагментацию
Russia Development Centre
Deutsche Bank
Тонкая подстройка CMS
 Поиск оптимальных параметров молодой сборки
 -XX:CMSWaitDuration=N
 -XX:+CMSScavengeBeforeRemark
 Инкрементальный или нет?
 Выгружать классы или нет?
http://blog.ragozin.info/2011/07/gc-check-list-for-data-grid-nodes.html
Russia Development Centre
Deutsche Bank
Фрагментация
Russia Development Centre
Deutsche Bank
Фрагментация
Последствия фрагментации
 Однопоточный STM Mark Sweep Compact
 Очень долгое promotion failure recovery
Больше памяти – самый эффективный способ борьбы с
фрагментацией
Russia Development Centre
Deutsche Bank
Другие проблемы
 Свопинг – (Javaисвопинг–вещинесовместные)
 Reference abuse
 Медленные сейвпоинты
 Прямой доступ к памяти через JNI
Russia Development Centre
Deutsche Bank
Deutsche Bank
Group Technology & Operations
Спасибо
Алексей Рагозин, Deutsche Bank
http://blog.ragozin.info - мои статьи о JVM и не только

Борьба с GС паузами в JVM

  • 1.
    Russia Development Centre DeutscheBank Deutsche Bank Group Technology & Operations Борьба с GC паузами в JVM Теория и Практика Алексей Рагозин, Deutsche Bank
  • 2.
    Russia Development Centre DeutscheBank Содержание доклада Теория • Алгоритмы • Экономическая модель • Гипотеза о поколениях • Барьеры записи • Модель длительности пауз Практика • Алгоритмы HotSpot JVM • Concurrent Mark Sweep • Сайзинг JVM • Фрагментация памяти • Другие проблемы 
  • 3.
    Russia Development Centre DeutscheBank Deutsche Bank Group Technology & Operations ТЕОРИЯ
  • 4.
    Russia Development Centre DeutscheBank Терминология Stop-the-world (STW) pause – полная заморозка прикладных потоков JVM Compacting algorithms – алгоритмыперемещающиеобъектывпамятивоизбежаниефрагментации Parallel collection – использование многопоточности для сокращения STW паузы Concurrent collection – “фоновая” сбора мусора не требующая STW
  • 5.
    Russia Development Centre DeutscheBank Как собрать “мусор”?  Подсчёт ссылок  Трассировка ссылок (обход графа)  А зачем собирать?
  • 6.
    Russia Development Centre DeutscheBank Трассирующие алгоритмы Mark Sweep • Обойти граф, начиная с “корневых” ссылок • Отметить живые объекты • Просканировать память и собрать “мусор” Сборка копированием (copy collector) • Каждый достижимый объект туже копируется в новую область памяти • Ссылки на другие объекты корректируются при копировании Mark Sweep Compact • Mark Sweep + перемещение объектов в ходе sweep фазы
  • 7.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots
  • 8.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots FROM TO roots
  • 9.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots FROM TO roots 1
  • 10.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots FROM TO roots 1 2
  • 11.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots FROM TO roots 1 2
  • 12.
    Russia Development Centre DeutscheBank Сборка копированием FROM TO roots FROM TO roots 1 23
  • 13.
    Russia Development Centre DeutscheBank Экономика сборки мусора S – объём кучи L – объём живых объектов Copy collection  Эффективность Mark-Sweep  Эффективность L LS c S LS c L LS c 21 Объѐм мусора в куче
  • 14.
    Russia Development Centre DeutscheBank Слабая гипотеза о поколениях Постулаты  Большинство объектов умирают молодыми  Число ссылок на молодые объекты мало Следствие Еслихранитьмолодыеобъектыотдельноотстарых,можнообеспечить высокую пропускную способность (молодое поколение) и эффективное использование памяти (старое поколение).
  • 15.
    Russia Development Centre DeutscheBank Демография объектов в куче Смертность(байт/с) Возраст объектов Период молодой сборки Период старой сборки ∞
  • 16.
    Russia Development Centre DeutscheBank Generational collection Молодое поколение  Сборщик настроен на пропускную способность Старое поколение  Сборщик настроен на эффективное использование памяти Продвижение (promotion) объектов в старое поколение  Сборщик молодого поколения копирует живые объекты в старое поколение после достижения “зрелого” возраста
  • 17.
    Russia Development Centre DeutscheBank Generational collection Как получить все указатели из старого поколения на молодое? Ответ – барьер на запись Каждый раз при записи указателя в память в “старом” пространстве, срабатывает барьер
  • 18.
    Russia Development Centre DeutscheBank Молодая сборка HotSpot JVM Eden S1 S2 Tenured Dirty cards Collect roots for young GC Scan stack traces Scan dirty pages in old space Сбор “корневых” ссылок
  • 19.
    Russia Development Centre DeutscheBank Молодая сборка 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) Копирование живых объектов
  • 20.
    Russia Development Centre DeutscheBank Молодая сборка HotSpot JVM Eden S1 S2 Tenured Dirty cards Сборка закончена Области памяти, не помеченные в таблице карт, не могут содержать ссылки на молодое поколение
  • 21.
    Russia Development Centre DeutscheBank Фоновая маркировка Проблема  Граф объектов меняется по мере обхода * * Даже в функциональных языках могут выполняться отложенные вычисления, меняющие граф Решение  Барьер на запись – отслеживание ссылок изменившихся за время обхода
  • 22.
    Russia Development Centre DeutscheBank Фоновая маркировка  Card marking write barrier HotSpot CMS, JRockit, IBM J9  Snapshot-at-the-beginning (SATB) write barrier HotSpot G1  Альтернатива барьерузаписи– барьер на чтении  Azul Zing JVM
  • 23.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC A C
  • 24.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC C D
  • 25.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC C D Reference queue: B DОчередь ссылок:
  • 26.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC C D
  • 27.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC D D
  • 28.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC Reference queue: B DОчередь ссылок:
  • 29.
    Russia Development Centre DeutscheBank SATB барьер записи (G1) A B C D GC Reference queue: B D emptyОчередь ссылок: пусто
  • 30.
    Russia Development Centre DeutscheBank Concurrent Mark Sweep [пауза] Сбор корневых ссылок [фон] Обход графа объектов [фон] Перемаркирова “грязных” страниц [паузa] Финальная перемаркирова [фон] Сканирование памяти (sweep)
  • 31.
    Russia Development Centre DeutscheBank Длительность паузы (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 Пропорционально размеру старого поколения Стремится к константе с ростом размера старого поколения Пропорционально размеру старого поколения Стремится к константе с ростом размера старого поколения
  • 32.
    Russia Development Centre DeutscheBank Эксперимент http://blog.ragozin.info/2011/07/openjdk-patch-cutting-down-gc-pause.html
  • 33.
    Russia Development Centre DeutscheBank Другие компоненты паузы Время синхронизации в safe point Ожидание JNI блокировок Сканирование стека Обработка ссылок • Weak • Soft • JNI • Finalizers
  • 34.
    Russia Development Centre DeutscheBank Deutsche Bank Group Technology & Operations Практика
  • 35.
    Russia Development Centre DeutscheBank “Боевые” настройки JVM HotSpot JVM Concurrent Mark Sweep алгоритм Сайзинг памяти под приложение
  • 36.
    Russia Development Centre DeutscheBank Сайзинг  -Xmx = -Xms  -Xmx = размер старого + размер молодого  -Xmn = размер молодого  Старое поколение:  Данные приложения (jmap –histo)  Запас 30-50% на фоновую сборку и фрагментацию
  • 37.
    Russia Development Centre DeutscheBank Тонкая подстройка CMS  Поиск оптимальных параметров молодой сборки  -XX:CMSWaitDuration=N  -XX:+CMSScavengeBeforeRemark  Инкрементальный или нет?  Выгружать классы или нет? http://blog.ragozin.info/2011/07/gc-check-list-for-data-grid-nodes.html
  • 38.
    Russia Development Centre DeutscheBank Фрагментация
  • 39.
    Russia Development Centre DeutscheBank Фрагментация Последствия фрагментации  Однопоточный STM Mark Sweep Compact  Очень долгое promotion failure recovery Больше памяти – самый эффективный способ борьбы с фрагментацией
  • 40.
    Russia Development Centre DeutscheBank Другие проблемы  Свопинг – (Javaисвопинг–вещинесовместные)  Reference abuse  Медленные сейвпоинты  Прямой доступ к памяти через JNI
  • 41.
    Russia Development Centre DeutscheBank Deutsche Bank Group Technology & Operations Спасибо Алексей Рагозин, Deutsche Bank http://blog.ragozin.info - мои статьи о JVM и не только