Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
G1GC: Garbage-First Garbage CollectorВладимир ИвановOracle Corporation Copyright © 2012, Oracle and/or its affiliates. All...
Содержание•      Основы сборки мусора•      Обзор GC в HotSpot JVM•      G1: обзор архитектуры•      Миграция на G1•      ...
GC == Сборка мусора• Находит и освобождает место, занимаемое  ненужными объектами     – Объекты вне транзитивного замыкани...
Сборка мусора: доRuntime                                     Heap Stack                                                   ...
Сборка мусора: послеRuntime                                     Heap Stack                                                ...
Сборка мусора с поколениями• Слабая гипотеза о поколениях     – Большинство объектов временные     – Старые объекты редко ...
Сборка мусора с поколениями                                                                         Создание объектаНеобхо...
Структура молодого поколенияCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусораCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусораCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание• Основы сборки мусора         • Понятие «производительности» для GC         • Различные подходы к сборке мусора...
Производительность GC• 3 характеристики     • Throughput              • Объем вычислительных ресурсов, затрачиваемых на GC...
Производительность GCОптимизируйте по 2 из 3                                                              Throughput      ...
Производительность GCВыбор стратегии                                                            Throughput         Latency...
Производительность GCИзменение размера «кучи»                                                              Throughput     ...
Содержание• Основы сборки мусора         • Понятие «производительности» для GC         • Различные подходы к сборке мусора...
Чем хорош Stop-The-World GC?• Проще всего определять достижимость объектов     – Граф объектов «заморожен»• Проще всего пе...
Инкрементальная сборка• Попытка уменьшить паузы, вызванные GC, за счет     – Большего количества коротких пауз     – Фонов...
Предсказуемость vs Throughput• STW     – Продолжительные паузы     – … но никакой лишней нагрузки для потоков приложения  ...
Содержание•      Основы сборки мусора•      Обзор GC в HotSpot JVM•      G1: обзор архитектуры•      Миграция на G1•      ...
GC в Hotspot JVM  Взгляд изнутри                                                         GC Framework                     ...
GC в Hotspot JVMВзгляд извне• SerialGC     – последовательная сборка молодого и старого поколений• ParallelGC     – максим...
SerialGC• Молодое поколение: последовательный копирующий GC• Старшее поколение: последовательный Mark-Sweep-Compact  – Алл...
ParallelGC• Молодое поколение: параллельный копирующий• Старшее поколение: параллельный Mark-Compact  – Аллокация: линейна...
CMS• Молодое поколение: параллельный копирующий GC• Старшее поколение: фоновый Mark-Sweep GC  – Аллокация: free-листы  – К...
Содержание•      Основы сборки мусора•      Обзор GC в HotSpot JVM•      G1: обзор архитектуры•      Миграция на G1•      ...
Garbage-First GC (G1)• Фоновый и параллельный• Высокая предсказуемость работы• Сборщик мусора с поколениями, но …     • «К...
G1: Структура «кучи»                                                                       Разбита на регионы• Разбита на ...
G1: Структура «кучи»                                                                       Молодое поколение• Молодое поко...
G1: Структура «кучи»                                                                       Старое поколение• Старое поколе...
G1: Структура «кучи»                                                                           H       Большие объекты    ...
G1: Структура «кучи»                                                                           H   Collection Set         ...
G1: Структура «кучи»                                                                           H   Типы сборок            ...
G1: Структура «кучи»                                                                           H       Сборка             ...
G1: Структура «кучи»                                                                           H       Освобождение памяти...
G1: Структура «кучи»                                                                           H       • RSet == Remembere...
Барьер на запись• Код, исполняемый при изменении значения поля  объекта с указателем     • Специфичен для каждого GC     •...
G1: Барьеры на запись• 2 типа     – Pre-barrier              • Сохраняет старое значение поля              • Поддерживаетс...
G1: Фоновая маркировка• Периодически все живые объекты в куче  помечаются     • обновляет информацию о достижимости по рег...
G1: Как включить?• -XX:+UseG1GC• -Xms/-Xmx• Задаваемые цели на длительность и частоту пауз     – -XX:MaxGCPauseMillis=<num...
Содержание•      Основы сборки мусора•      Обзор GC в HotSpot JVM•      G1: обзор архитектуры•      Миграция на G1•      ...
GC в Hotspot JVMВзгляд извне• SerialGC     – последовательная сборка молодого и старого поколений• ParallelGC     – максим...
Производительность GCОптимизируйте по 2 из 3                                                              Throughput      ...
G1 рекомендуется, если…… не обязательно все…•      Нужна хорошая производительность•      Продолжительность пауз (<0.5-1s)...
G1 НЕ рекомендуется, если• Приложение уже работает надежно без серьезных  проблем с производительностью                   ...
Как выбирать GC?          1.                                   ParallelGC                               Паузы не устраиваю...
Содержание•      Основы сборки мусора•      Обзор GC в HotSpot JVM•      G1: обзор архитектуры•      Миграция на G1•      ...
Диагностический вывод GC• Параметры VM  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:<file>  -XX:+PrintGCDateStamps...
VisualVM / VisualGCCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
Q&ACopyright © 2012, Oracle and/or its affiliates. All rights reserved.
51   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Upcoming SlideShare
Loading in …5
×

"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

4,764 views

Published on

Published in: Technology
  • Be the first to comment

"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

  1. 1. G1GC: Garbage-First Garbage CollectorВладимир ИвановOracle Corporation Copyright © 2012, Oracle and/or its affiliates. All rights reserved.vladimir.x.ivanov@oracle.com
  2. 2. Содержание• Основы сборки мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  3. 3. GC == Сборка мусора• Находит и освобождает место, занимаемое ненужными объектами – Объекты вне транзитивного замыкания, включающего roots (стеки потоков, статические поля классов и т.д.)• Автоматическая и безопасная• Проще, если граф объектов “заморожен” – Stop-the-world (STW) паузы• Возможны различные подходы – c дефрагментацией или без – Алгоритмы: copying, mark-sweep, mark-compact, ... – Аллокация: linear, free lists, ...Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  4. 4. Сборка мусора: доRuntime Heap Stack A C G K D H B E I L F J M Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  5. 5. Сборка мусора: послеRuntime Heap Stack A C G K D H B E I L F J M Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  6. 6. Сборка мусора с поколениями• Слабая гипотеза о поколениях – Большинство объектов временные – Старые объекты редко ссылаются на молодые• Молодые и старые объекты содержатся отдельно – В пространствах, называемых “поколения” (generations) – Возможны разные алгоритмы для молодого и старого поколения – Mолодое поколение можно собирать отдельно от старогоCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  7. 7. Сборка мусора с поколениями Создание объектаНеобходимоотслеживать ссылки Молодое поколение Перемещение объекта Старшее поколение Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  8. 8. Структура молодого поколенияCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  9. 9. Молодое поколение: сборка мусораCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  10. 10. Молодое поколение: сборка мусораCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  11. 11. Содержание• Основы сборки мусора • Понятие «производительности» для GC • Различные подходы к сборке мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  12. 12. Производительность GC• 3 характеристики • Throughput • Объем вычислительных ресурсов, затрачиваемых на GC • Предсказуемость • На какое время прерывается работа приложения • Footprint • Объем используемой памятиCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  13. 13. Производительность GCОптимизируйте по 2 из 3 Throughput Latency FootprintCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  14. 14. Производительность GCВыбор стратегии Throughput Latency Footprint =Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  15. 15. Производительность GCИзменение размера «кучи» Throughput Latency FootprintCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  16. 16. Содержание• Основы сборки мусора • Понятие «производительности» для GC • Различные подходы к сборке мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  17. 17. Чем хорош Stop-The-World GC?• Проще всего определять достижимость объектов – Граф объектов «заморожен»• Проще всего перемещать объекты в «куче» – В процессе сборки, «куча» может находиться в некорректном состоянии• Но: – Приложение останавливается на все время сборки – зависит от размера «кучи» / объема живых объектовCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  18. 18. Инкрементальная сборка• Попытка уменьшить паузы, вызванные GC, за счет – Большего количества коротких пауз – Фоновая сборка• Требуется синхронизировать работу GC с приложением – Барьеры на чтение/записьCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  19. 19. Предсказуемость vs Throughput• STW – Продолжительные паузы – … но никакой лишней нагрузки для потоков приложения – Максимальный throughput• Инкрементальная сборка – Короткие паузы – Лишняя нагруза в потоках приложения – Минимальные паузы за счет снижения throughput• “Über GC” не существует!Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  20. 20. Содержание• Основы сборки мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  21. 21. GC в Hotspot JVM Взгляд изнутри GC Framework GC Interface Parallel / Serial Parallel Serial Parallel ConcurrentYoung DefNew ParNew PScavenge GenOld Tenured CMS PSOld PSParOldGenWhole G1Heap Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  22. 22. GC в Hotspot JVMВзгляд извне• SerialGC – последовательная сборка молодого и старого поколений• ParallelGC – максимальный throughput – параллельная сборка молодого и старого поколений• CMS – предсказуемость – по возможности, сборка мусора в фоновом режиме• G1 – предсказуемость – слабо подвержен фрагментацииCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  23. 23. SerialGC• Молодое поколение: последовательный копирующий GC• Старшее поколение: последовательный Mark-Sweep-Compact – Аллокация: линейная• -XX:+UseSerialGCCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  24. 24. ParallelGC• Молодое поколение: параллельный копирующий• Старшее поколение: параллельный Mark-Compact – Аллокация: линейная• -XX:+UseParallelGC -XX:+UseParallelOldGCCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  25. 25. CMS• Молодое поколение: параллельный копирующий GC• Старшее поколение: фоновый Mark-Sweep GC – Аллокация: free-листы – Компактификация только при FullGC• -XX:+UseConcMarkSweepGCCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  26. 26. Содержание• Основы сборки мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  27. 27. Garbage-First GC (G1)• Фоновый и параллельный• Высокая предсказуемость работы• Сборщик мусора с поколениями, но … • «Куча» состоит из регионов • Нет физического разделения между молодым и старым поколением • Принадлежность регионов определяется динамически • Для каждого региона известно где находятся объекты, ссылающиеся на него • “Remembered Set” • Позволяет собирать регионы независимоCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  28. 28. G1: Структура «кучи» Разбита на регионы• Разбита на регионы • Фиксированного размера • Фиксированного размера • 1MB-32MB • 1MB-32MBCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  29. 29. G1: Структура «кучи» Молодое поколение• Молодое поколение E Набор регионов E • Набор регионов • • Eden • Eden S • Survivor • Survivor E E • Выбирается динамически • Выбираются динамически S E ECopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  30. 30. G1: Структура «кучи» Старое поколение• Старое поколение • Набор регионов E Набор регионов – E • Выбирается динамически – Выбираются S динамически E E S E ECopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  31. 31. G1: Структура «кучи» H Большие объекты • Не помещается в регион E E • Называется “humongous” S • Хранится в наборе E E смежных регионов S E H E HCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  32. 32. G1: Структура «кучи» H Collection Set • Регионы, в которых будет происходить GC S • Все молодое поколение • Некоторые регионы из старшего поколения S • Фоновая маркировка определяет наиболее H подходящие HCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  33. 33. G1: Структура «кучи» H Типы сборок • В молодом поколении • Смешанные (mixed) S • FullGC S H HCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  34. 34. G1: Структура «кучи» H Сборка • Копирование объектов в регионы, помеченные как S часть «To»-пространства • Survivor-регионы • Регионы из старшего S поколения H H SCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  35. 35. G1: Структура «кучи» H Освобождение памяти • From-space больше чем To- space (не обязательно!) • Компактификация за счет копирования H H SCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  36. 36. G1: Структура «кучи» H • RSet == Remembered Set • Информация о местонахождении ссылок на объекты из региона • Позволяет собирать регионы RS независимо • RSet поддерживается H • Из старого в молодое поколение RS • Между регионами в старом E поколении H SCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  37. 37. Барьер на запись• Код, исполняемый при изменении значения поля объекта с указателем • Специфичен для каждого GC • Абсолютно прозрачен для приложения • Исполняется интерпретатором / генерируется JIT-компилятором• Пример (для обновления card table): a.f = x; a.f = x; card_table[index_for(&a.f)] = DIRTY_VALUE;Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  38. 38. G1: Барьеры на запись• 2 типа – Pre-barrier • Сохраняет старое значение поля • Поддерживается корректность фоновой маркировки • SATB (Snapshot-At-The-Beginning) – Post-barrier • Поддержка актуальности RSet• Результат сохраняется в буферы, локальные для потока – В процессе фоновой сборки происходит обработкаCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  39. 39. G1: Фоновая маркировка• Периодически все живые объекты в куче помечаются • обновляет информацию о достижимости по регионам • автоматически освобождает регионы без живых объектов • разбивает циклические зависимости среди недостижимых объектов• Параллельная и фоновая• Стартует автоматически по достижении пороговой занятости «кучи»Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  40. 40. G1: Как включить?• -XX:+UseG1GC• -Xms/-Xmx• Задаваемые цели на длительность и частоту пауз – -XX:MaxGCPauseMillis=<num> – -XX:GCPauseIntervalMillis=<num>Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  41. 41. Содержание• Основы сборки мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  42. 42. GC в Hotspot JVMВзгляд извне• SerialGC – последовательная сборка молодого и старого поколений• ParallelGC – максимальный throughput – параллельная сборка молодого и старого поколений• CMS – предсказуемость – по возможности, сборка мусора в фоновом режиме• G1 – предсказуемость – слабо подвержен фрагментацииCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  43. 43. Производительность GCОптимизируйте по 2 из 3 Throughput Latency FootprintCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  44. 44. G1 рекомендуется, если…… не обязательно все…• Нужна хорошая производительность• Продолжительность пауз (<0.5-1s)• Минимальная настройка• Размер «кучи» >5Gb• Занятость «кучи» >50%• Скорость создания объектов серьезно варьируется• Фрагментация «кучи» Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  45. 45. G1 НЕ рекомендуется, если• Приложение уже работает надежно без серьезных проблем с производительностью “If it isnt broken, dont fix it!”• Жесткие требования на паузы <100мс• Требуется максимальный возможный throughput • даже в ущерб latencyCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  46. 46. Как выбирать GC? 1. ParallelGC Паузы не устраивают 2. G1 Подходит? ДA! PROFIT! Паузы все еще не устраивают «Куча» <2Gb 3. CMSCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  47. 47. Содержание• Основы сборки мусора• Обзор GC в HotSpot JVM• G1: обзор архитектуры• Миграция на G1• Мониторинг работы GC Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  48. 48. Диагностический вывод GC• Параметры VM -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:<file> -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution• Минимальные накладные расходы• Анализ диагностического вывода GC • PrintGCStats • GChisto Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  49. 49. VisualVM / VisualGCCopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  50. 50. Q&ACopyright © 2012, Oracle and/or its affiliates. All rights reserved.
  51. 51. 51 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

×