SlideShare a Scribd company logo
1   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1GC: Garbage-First Garbage Collector
    Владимир Иванов
    Oracle Corporation
2   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
    vladimir.x.ivanov@oracle.com
Содержание


    • Основы сборки мусора
    • G1: обзор архитектуры
    • Миграция на G1




3   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GC == Сборка мусора


    • Находит и освобождает место, занимаемое
      ненужными объектами
          • Объекты вне транзитивного замыкания, включающего roots
            (стеки потоков, статические поля классов и т.д.)
    • Автоматическая и безопасная
    • Проще, если граф объектов “заморожен”
          • Stop-the-world (STW) паузы
    • Возможны различные подходы
          • c дефрагментацией или без
          • Алгоритмы: copying, mark-sweep, mark-compact, ...
          • Аллокация: linear, free lists, ...



4   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: до

Runtime                                         Heap
 Stack
                                                              A             C   G   K


                                                                            D   H


                                                              B             E   I   L


                                                                            F   J   M




 5   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора: после

Runtime                                         Heap
 Stack
                                                              A             C   G   K


                                                                            D   H


                                                              B             E   I   L


                                                                            F   J   M




 6   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями


    • Слабая гипотеза о поколениях
          • Большинство объектов временные
          • Старые объекты редко ссылаются на молодые


    • Молодые и старые объекты содержатся отдельно
          • В пространствах, называемых “поколения” (generations)
          • Возможны разные алгоритмы для молодого и старого
            поколения
          • Mолодое поколение можно собирать отдельно от старого




7   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Сборка мусора с поколениями


                                                                            Создание объекта
Необходимо
отслеживать ссылки

                                                                           Молодое поколение



                                                                            Перемещение объекта




                                                                             Старшее поколение




8   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Структура молодого поколения




9   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора




10   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Молодое поколение: сборка мусора




11   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание


     • Основы сборки мусора
     • G1: обзор архитектуры
     • Миграция на G1




12   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Garbage-First GC (G1)


     • Фоновый и параллельный
     • Высокая предсказуемость работы
     • Сборщик мусора с поколениями, но …
           • «Куча» состоит из регионов
           • Нет физического разделения между молодым и старым
             поколением
           • Принадлежность регионов определяется динамически
           • Для каждого региона известно где находятся объекты,
             ссылающиеся на него
                    • “Remembered Set”
                    • Позволяет собирать регионы независимо




13   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                            • Разбита на регионы
                                                                             • Фиксированного размера
                                                                             • 1MB-32MB




14   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                • Молодое поколение
                                                                                 • Набор регионов
         E                            E
                                                                                   • Eden
                                                                   S               • Survivor
                                      E                                     E    • Выбираются динамически
         S
                                      E


                        E




15   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                • Старое поколение
                                                                                 • Набор регионов
         E                            E
                                                                                 • Выбираются динамически
                                                                   S
                                      E                                     E
         S
                                      E


                        E




16   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                H       • Большие объекты
                                                                                         • Не помещается в регион
         E                            E
                                                                                         • Называются “humongous”
                                                                   S                     • Находятся в наборе
                                      E                                             E      смежных регионов
         S
                                      E                                     H


                        E
         H



17   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                H   • Collection Set
                                                                                      • Регионы, в которых будет
                                                                                        происходить GC
                                                                   S                    • Все молодое поколение
                                                                                        • Некоторые регионы из
                                                                                          старшего поколения
         S                                                                                 • Фоновая маркировка
                                                                                             определяет наиболее
                                                                            H                подходящие




         H



18   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                H       • Сборка
                                                                                         • Копирование объектов в
                                                                                           регионы, помеченные как
                                                                   S                       часть «To»-пространства
                                                                                           • Survivor-регионы
                                                                                           • Регионы из старшего
         S                                                                                   поколения
                                                                            H



         H                                                                          S



19   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                H       • Reclamation
                                                                                         • From-space larger than to-
                                                                                           space (hopefully!)
                                                                                         • Compaction via copying




                                                                            H



         H                                                                          S



20   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Структура «кучи»

                                                                                H       • RSet == Remembered Set
                                                                                         • Информация о
                                                                                           местонахождении ссылок на
                                                                                           регион
                                                                                         • Позволяет собирать регионы
                                             RS                                            независимо
                                                                                         • RSet поддерживается
                                                                            H              • Из старого в молодое
                                                                                             поколение
                              RS                                                           • Между регионами в старом
                                      E                                                      поколении

         H                                                                          S



21   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Фоновая маркировка


     • Периодически все живые объекты в куче
       помечаются
           • обновляет информацию о достижимости по регионам
           • автоматически освобождает регионы без живых объектов
           • разбивает циклические зависимости среди недостижимых
             объектов
     • Параллельная и фоновая
     • Стартует автоматически по достижении пороговой
       занятости «кучи»




22   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Барьер на запись


     • Код, исполняемый при изменении значения поля
       объекта с указателем
           • Специфичен для каждого GC
           • Абсолютно прозрачен для приложения
                    • Исполняется интерпретатором / генерируется JIT-компилятором


     • Пример (для обновления card table):

                   a.f = x;                                                 a.f = x;
                                                                            card_table[index_for(&a.f)] = DIRTY_VALUE;




23   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Барьеры на запись


     • 2 типа
           • Pre-barrier
                    • Сохраняет старое значение поля
                    • Поддерживается корректность фоновой маркировки
                    • SATB (Snapshot-At-The-Beginning)
           • Post-barrier
                    • Поддержка актуальности RSet
     • Результат сохраняется в буферы, локальные для
       потока
           • В процессе фоновой сборки происходит обработка




24   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1: Как включить?


     • -XX:+UseG1GC

     • -Xms/-Xmx
     • Задаваемые цели на длительность и частоту пауз
           • -XX:MaxGCPauseMillis=<num>
           • -XX:GCPauseIntervalMillis=<num>




25   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Содержание


     • Основы сборки мусора
     • G1: обзор архитектуры
     • Миграция на G1




26   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GCs в Hotspot JVM


                                                             GC Framework                               GC Interface
                                                                                         Parallel /
                                      Serial                                 Parallel                 Serial     Parallel
                                                                                        Concurrent

Young
                                DefNew                                       ParNew                            PScavenge
 Gen

Old
                                Tenured                                                   CMS         PSOld    PSParOld
Gen

Whole
                                                                                           G1
Heap




 27   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
GC в Hotspot JVM


     • SerialGC
           • последовательная сборка молодого и старого поколений
     • ParallelGC
           • максимальный throughput
           • параллельная сборка молодого и старого поколений
     • CMS
           • предсказуемость
           • по возможности, сборка мусора в фоновом режиме
     • G1
           • предсказуемость
           • слабо подвержен фрагментации



28   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC


     • 3 характеристики
           • Throughput
                    • Объем вычислительных ресурсов, затрачиваемых на GC
           • Предсказуемость
                    • На какое время прерывается работа приложения
           • Footprint
                    • Объем используемой памяти




29   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Производительность GC


                                                                    Throughput




             Latency                                                             Footprint   =



30   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Чем хорош Stop-The-World GC?


     • Проще всего определять достижимость объектов
           • Граф объектов «заморожен»
     • Проще всего перемещать объекты в «куче»
           • В процессе сборки, «куча» может находиться в некорректном
             состоянии


     • Но:
           • Приложение останавливается на все время сборки
           • зависит от размера «кучи» / объема живых объектов




31   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Инкрементальная сборка


     • Попытка уменьшить паузы, вызванные GC, за счет
           • Большего количества коротких пауз
           • Фоновая сборка


     • Требуется синхронизировать работу GC с
       приложением
           • Барьеры на чтение/запись




32   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Предсказуемость vs Throughput


 • STW
          • Продолжительные паузы
          • … но никакой лишней нагрузки для потоков приложения
          • Максимальный throughput


 • Инкрементальная сборка
          • Короткие паузы
          • Лишняя нагруза в потоках приложения
          • Минимальные паузы за счет снижения throughput


 • “Über GC” не существует

33   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 рекомендуется, если…


     •   Нужна хорошая производительность
     •   Минимальная настройка
     •   Размер «кучи» >2-4Gb
     •   Занятость «кучи» >50%
     •   Продолжительность пауз (<0.5-1s)
     •   Скорость создания объектов серьезно варьируется
     •   Фрагментация «кучи»




34   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
G1 НЕ рекомендуется, если


     • Приложение уже работает надежно без серьезных
       проблем с производительностью
           • “If it isn't broken, don't fix it!”
     • Жесткие требования на паузы <100мс




35   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Как выбирать GC?

                1.                                       ParallelGC

                                Паузы не устраивают


                2.                                                G1        Подходит? Да!   DONE!

                 Паузы все еще не устраивают
                  «Куча» <2Gb

                3.                                              CMS




36   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
Q&A



37   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
38   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
39   Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

More Related Content

PPT
CodeFest 2010. Орлов А. — Лидерство или о грядках и огородах
PPSX
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
PDF
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
PDF
CodeFest 2014. Симаков М. — Инфографика, как это работает
PPT
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
PDF
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
PPTX
CodeFest 2013. Конев М. — Push-уведомления
PPT
CodeFest 2010. Погребняк А. — Проблемы оценки труда программистов
CodeFest 2010. Орлов А. — Лидерство или о грядках и огородах
CodeFest 2011. Сидоров А. — Почему некоторые программисты любят изобретать «в...
CodeFest 2012. Шкарин П. — Отказоустойчивость или высокие нагрузки
CodeFest 2014. Симаков М. — Инфографика, как это работает
CodeFest 2011. Ширшаков Д. — Как подружить ежа с ужом или другой взгляд на DWH
CodeFest 2010. Иноземцев И. — Fantom. Cross-VM Language
CodeFest 2013. Конев М. — Push-уведомления
CodeFest 2010. Погребняк А. — Проблемы оценки труда программистов

Viewers also liked (20)

PDF
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
PPT
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
PDF
CodeFest 2012. Рыжиков С. — Архитектура и запуск облачного сервиса в Amazon A...
PPTX
Keynote: Challenges, Pains and Points of Software Development Today
PPTX
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
PDF
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
PPT
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
PDF
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
PPTX
CodeFest 2012. Каплинский К. — Разработка Open Source продуктов как прибыльны...
PDF
CodeFest 2013. Гилев Е. — Создание пользовательского интерфейса без программи...
PPTX
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
PDF
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
PDF
Сверхоптимизация кода на Python
ODP
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
PDF
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
PDF
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
PDF
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
PDF
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
PDF
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
PDF
CodeFest 2013. Русанов П. — Есть ли жизнь в оффлайне? Кеш, транзакционный лог...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
Codefest 2011. Вольфтруб А. — О чем стоит подумать, приступая к разработке вы...
CodeFest 2012. Рыжиков С. — Архитектура и запуск облачного сервиса в Amazon A...
Keynote: Challenges, Pains and Points of Software Development Today
CodeFest 2011. Крестьянинов М. — Обзор аспектно-ориентированного программиров...
CodeFest 2013. Днепровский П. — Морковка: спереди или сзади? Игровые механики...
CodeFest 2011. Токарев О — Конструирование кода: «Думай верно!» (или 5 Правил...
CodeFest 2010. Горбатовский С. — Заказные проекты: как не собрать все грабли
CodeFest 2012. Каплинский К. — Разработка Open Source продуктов как прибыльны...
CodeFest 2013. Гилев Е. — Создание пользовательского интерфейса без программи...
CodeFest 2011. Юферев Р. — Пора задуматься о Manageability
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
Сверхоптимизация кода на Python
CodeFest 2012. Ильин А. — Метрики покрытия. Прагматичный подход
CodeFest 2014. Орешкина Е. — Информационная архитектура в быту, работе и стар...
CodeFest 2010. Уразов А. — Quality-Oriented Programming (Программирование, ор...
CodeFest 2014. Сибирев А. — Управление инфраструктурой под Cocaine
CodeFest 2013. Агафонкин В. — Высокопроизводительные визуализации данных в бр...
CodeFest 2014. Шипилёв А. — Java Benchmarking: как два таймстампа записать!
CodeFest 2013. Русанов П. — Есть ли жизнь в оффлайне? Кеш, транзакционный лог...
Ad

More from CodeFest (20)

PDF
Alexander Graebe
PDF
Никита Прокопов
PPTX
Денис Баталов
PDF
Елена Гальцина
PDF
Александр Калашников
PDF
Ирина Иванова
PDF
Marko Berković
PDF
Денис Кортунов
PDF
Александр Зимин
PDF
Сергей Крапивенский
PDF
Сергей Игнатов
PDF
Николай Крапивный
PDF
Alexander Graebe
PDF
Вадим Смирнов
PDF
Константин Осипов
PDF
Raffaele Rialdi
PDF
Максим Пугачев
PDF
Rene Groeschke
PDF
Иван Бондаренко
PDF
Mete Atamel
Alexander Graebe
Никита Прокопов
Денис Баталов
Елена Гальцина
Александр Калашников
Ирина Иванова
Marko Berković
Денис Кортунов
Александр Зимин
Сергей Крапивенский
Сергей Игнатов
Николай Крапивный
Alexander Graebe
Вадим Смирнов
Константин Осипов
Raffaele Rialdi
Максим Пугачев
Rene Groeschke
Иван Бондаренко
Mete Atamel
Ad

CodeFest 2012. Иванов В. — G1: новый сборщик мусора в HotSpot JVM

  • 1. 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 2. G1GC: Garbage-First Garbage Collector Владимир Иванов Oracle Corporation 2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. vladimir.x.ivanov@oracle.com
  • 3. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G1 3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 4. GC == Сборка мусора • Находит и освобождает место, занимаемое ненужными объектами • Объекты вне транзитивного замыкания, включающего roots (стеки потоков, статические поля классов и т.д.) • Автоматическая и безопасная • Проще, если граф объектов “заморожен” • Stop-the-world (STW) паузы • Возможны различные подходы • c дефрагментацией или без • Алгоритмы: copying, mark-sweep, mark-compact, ... • Аллокация: linear, free lists, ... 4 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 5. Сборка мусора: до Runtime Heap Stack A C G K D H B E I L F J M 5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 6. Сборка мусора: после Runtime Heap Stack A C G K D H B E I L F J M 6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 7. Сборка мусора с поколениями • Слабая гипотеза о поколениях • Большинство объектов временные • Старые объекты редко ссылаются на молодые • Молодые и старые объекты содержатся отдельно • В пространствах, называемых “поколения” (generations) • Возможны разные алгоритмы для молодого и старого поколения • Mолодое поколение можно собирать отдельно от старого 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 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 12. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G1 12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 13. Garbage-First GC (G1) • Фоновый и параллельный • Высокая предсказуемость работы • Сборщик мусора с поколениями, но … • «Куча» состоит из регионов • Нет физического разделения между молодым и старым поколением • Принадлежность регионов определяется динамически • Для каждого региона известно где находятся объекты, ссылающиеся на него • “Remembered Set” • Позволяет собирать регионы независимо 13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 14. G1: Структура «кучи» • Разбита на регионы • Фиксированного размера • 1MB-32MB 14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 15. G1: Структура «кучи» • Молодое поколение • Набор регионов E E • Eden S • Survivor E E • Выбираются динамически S E E 15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 16. G1: Структура «кучи» • Старое поколение • Набор регионов E E • Выбираются динамически S E E S E E 16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 17. G1: Структура «кучи» H • Большие объекты • Не помещается в регион E E • Называются “humongous” S • Находятся в наборе E E смежных регионов S E H E H 17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 18. G1: Структура «кучи» H • Collection Set • Регионы, в которых будет происходить GC S • Все молодое поколение • Некоторые регионы из старшего поколения S • Фоновая маркировка определяет наиболее H подходящие H 18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 19. G1: Структура «кучи» H • Сборка • Копирование объектов в регионы, помеченные как S часть «To»-пространства • Survivor-регионы • Регионы из старшего S поколения H H S 19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 20. G1: Структура «кучи» H • Reclamation • From-space larger than to- space (hopefully!) • Compaction via copying H H S 20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 21. G1: Структура «кучи» H • RSet == Remembered Set • Информация о местонахождении ссылок на регион • Позволяет собирать регионы RS независимо • RSet поддерживается H • Из старого в молодое поколение RS • Между регионами в старом E поколении H S 21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 22. G1: Фоновая маркировка • Периодически все живые объекты в куче помечаются • обновляет информацию о достижимости по регионам • автоматически освобождает регионы без живых объектов • разбивает циклические зависимости среди недостижимых объектов • Параллельная и фоновая • Стартует автоматически по достижении пороговой занятости «кучи» 22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 23. Барьер на запись • Код, исполняемый при изменении значения поля объекта с указателем • Специфичен для каждого GC • Абсолютно прозрачен для приложения • Исполняется интерпретатором / генерируется JIT-компилятором • Пример (для обновления card table): a.f = x; a.f = x; card_table[index_for(&a.f)] = DIRTY_VALUE; 23 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 24. G1: Барьеры на запись • 2 типа • Pre-barrier • Сохраняет старое значение поля • Поддерживается корректность фоновой маркировки • SATB (Snapshot-At-The-Beginning) • Post-barrier • Поддержка актуальности RSet • Результат сохраняется в буферы, локальные для потока • В процессе фоновой сборки происходит обработка 24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 25. G1: Как включить? • -XX:+UseG1GC • -Xms/-Xmx • Задаваемые цели на длительность и частоту пауз • -XX:MaxGCPauseMillis=<num> • -XX:GCPauseIntervalMillis=<num> 25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 26. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G1 26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 27. GCs в Hotspot JVM GC Framework GC Interface Parallel / Serial Parallel Serial Parallel Concurrent Young DefNew ParNew PScavenge Gen Old Tenured CMS PSOld PSParOld Gen Whole G1 Heap 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 28. GC в Hotspot JVM • SerialGC • последовательная сборка молодого и старого поколений • ParallelGC • максимальный throughput • параллельная сборка молодого и старого поколений • CMS • предсказуемость • по возможности, сборка мусора в фоновом режиме • G1 • предсказуемость • слабо подвержен фрагментации 28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 29. Производительность GC • 3 характеристики • Throughput • Объем вычислительных ресурсов, затрачиваемых на GC • Предсказуемость • На какое время прерывается работа приложения • Footprint • Объем используемой памяти 29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 30. Производительность GC Throughput Latency Footprint = 30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 31. Чем хорош Stop-The-World GC? • Проще всего определять достижимость объектов • Граф объектов «заморожен» • Проще всего перемещать объекты в «куче» • В процессе сборки, «куча» может находиться в некорректном состоянии • Но: • Приложение останавливается на все время сборки • зависит от размера «кучи» / объема живых объектов 31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 32. Инкрементальная сборка • Попытка уменьшить паузы, вызванные GC, за счет • Большего количества коротких пауз • Фоновая сборка • Требуется синхронизировать работу GC с приложением • Барьеры на чтение/запись 32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 33. Предсказуемость vs Throughput • STW • Продолжительные паузы • … но никакой лишней нагрузки для потоков приложения • Максимальный throughput • Инкрементальная сборка • Короткие паузы • Лишняя нагруза в потоках приложения • Минимальные паузы за счет снижения throughput • “Über GC” не существует 33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 34. G1 рекомендуется, если… • Нужна хорошая производительность • Минимальная настройка • Размер «кучи» >2-4Gb • Занятость «кучи» >50% • Продолжительность пауз (<0.5-1s) • Скорость создания объектов серьезно варьируется • Фрагментация «кучи» 34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 35. G1 НЕ рекомендуется, если • Приложение уже работает надежно без серьезных проблем с производительностью • “If it isn't broken, don't fix it!” • Жесткие требования на паузы <100мс 35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 36. Как выбирать GC? 1. ParallelGC Паузы не устраивают 2. G1 Подходит? Да! DONE! Паузы все еще не устраивают «Куча» <2Gb 3. CMS 36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 37. Q&A 37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 38. 38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  • 39. 39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.