SlideShare une entreprise Scribd logo
1  sur  39
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.

Contenu connexe

En vedette

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

En vedette (20)

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

Plus de CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

Plus de CodeFest (20)

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

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.