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

1,293 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,293
On SlideShare
0
From Embeds
0
Number of Embeds
173
Actions
Shares
0
Downloads
23
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

  1. 1. 1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  2. 2. G1GC: Garbage-First Garbage Collector Владимир Иванов Oracle Corporation2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. vladimir.x.ivanov@oracle.com
  3. 3. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  4. 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. 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. 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. 7. Сборка мусора с поколениями • Слабая гипотеза о поколениях • Большинство объектов временные • Старые объекты редко ссылаются на молодые • Молодые и старые объекты содержатся отдельно • В пространствах, называемых “поколения” (generations) • Возможны разные алгоритмы для молодого и старого поколения • Mолодое поколение можно собирать отдельно от старого7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  8. 8. Сборка мусора с поколениями Создание объектаНеобходимоотслеживать ссылки Молодое поколение Перемещение объекта Старшее поколение8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  9. 9. Структура молодого поколения9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  10. 10. Молодое поколение: сборка мусора10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  11. 11. Молодое поколение: сборка мусора11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  12. 12. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G112 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  13. 13. Garbage-First GC (G1) • Фоновый и параллельный • Высокая предсказуемость работы • Сборщик мусора с поколениями, но … • «Куча» состоит из регионов • Нет физического разделения между молодым и старым поколением • Принадлежность регионов определяется динамически • Для каждого региона известно где находятся объекты, ссылающиеся на него • “Remembered Set” • Позволяет собирать регионы независимо13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  14. 14. G1: Структура «кучи» • Разбита на регионы • Фиксированного размера • 1MB-32MB14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  15. 15. G1: Структура «кучи» • Молодое поколение • Набор регионов E E • Eden S • Survivor E E • Выбираются динамически S E E15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  16. 16. G1: Структура «кучи» • Старое поколение • Набор регионов E E • Выбираются динамически S E E S E E16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  17. 17. G1: Структура «кучи» H • Большие объекты • Не помещается в регион E E • Называются “humongous” S • Находятся в наборе E E смежных регионов S E H E H17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  18. 18. G1: Структура «кучи» H • Collection Set • Регионы, в которых будет происходить GC S • Все молодое поколение • Некоторые регионы из старшего поколения S • Фоновая маркировка определяет наиболее H подходящие H18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  19. 19. G1: Структура «кучи» H • Сборка • Копирование объектов в регионы, помеченные как S часть «To»-пространства • Survivor-регионы • Регионы из старшего S поколения H H S19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  20. 20. G1: Структура «кучи» H • Reclamation • From-space larger than to- space (hopefully!) • Compaction via copying H H S20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  21. 21. G1: Структура «кучи» H • RSet == Remembered Set • Информация о местонахождении ссылок на регион • Позволяет собирать регионы RS независимо • RSet поддерживается H • Из старого в молодое поколение RS • Между регионами в старом E поколении H S21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  22. 22. G1: Фоновая маркировка • Периодически все живые объекты в куче помечаются • обновляет информацию о достижимости по регионам • автоматически освобождает регионы без живых объектов • разбивает циклические зависимости среди недостижимых объектов • Параллельная и фоновая • Стартует автоматически по достижении пороговой занятости «кучи»22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  23. 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. 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. 25. G1: Как включить? • -XX:+UseG1GC • -Xms/-Xmx • Задаваемые цели на длительность и частоту пауз • -XX:MaxGCPauseMillis=<num> • -XX:GCPauseIntervalMillis=<num>25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  26. 26. Содержание • Основы сборки мусора • G1: обзор архитектуры • Миграция на G126 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  27. 27. GCs в Hotspot JVM GC Framework GC Interface Parallel / Serial Parallel Serial Parallel ConcurrentYoung DefNew ParNew PScavenge GenOld Tenured CMS PSOld PSParOldGenWhole G1Heap 27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  28. 28. GC в Hotspot JVM • SerialGC • последовательная сборка молодого и старого поколений • ParallelGC • максимальный throughput • параллельная сборка молодого и старого поколений • CMS • предсказуемость • по возможности, сборка мусора в фоновом режиме • G1 • предсказуемость • слабо подвержен фрагментации28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  29. 29. Производительность GC • 3 характеристики • Throughput • Объем вычислительных ресурсов, затрачиваемых на GC • Предсказуемость • На какое время прерывается работа приложения • Footprint • Объем используемой памяти29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  30. 30. Производительность GC Throughput Latency Footprint =30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  31. 31. Чем хорош Stop-The-World GC? • Проще всего определять достижимость объектов • Граф объектов «заморожен» • Проще всего перемещать объекты в «куче» • В процессе сборки, «куча» может находиться в некорректном состоянии • Но: • Приложение останавливается на все время сборки • зависит от размера «кучи» / объема живых объектов31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  32. 32. Инкрементальная сборка • Попытка уменьшить паузы, вызванные GC, за счет • Большего количества коротких пауз • Фоновая сборка • Требуется синхронизировать работу GC с приложением • Барьеры на чтение/запись32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  33. 33. Предсказуемость vs Throughput • STW • Продолжительные паузы • … но никакой лишней нагрузки для потоков приложения • Максимальный throughput • Инкрементальная сборка • Короткие паузы • Лишняя нагруза в потоках приложения • Минимальные паузы за счет снижения throughput • “Über GC” не существует33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  34. 34. G1 рекомендуется, если… • Нужна хорошая производительность • Минимальная настройка • Размер «кучи» >2-4Gb • Занятость «кучи» >50% • Продолжительность пауз (<0.5-1s) • Скорость создания объектов серьезно варьируется • Фрагментация «кучи»34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  35. 35. G1 НЕ рекомендуется, если • Приложение уже работает надежно без серьезных проблем с производительностью • “If it isnt broken, dont fix it!” • Жесткие требования на паузы <100мс35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  36. 36. Как выбирать GC? 1. ParallelGC Паузы не устраивают 2. G1 Подходит? Да! DONE! Паузы все еще не устраивают «Куча» <2Gb 3. CMS36 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  37. 37. Q&A37 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  38. 38. 38 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.
  39. 39. 39 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

×