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

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

description

 

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

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

1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

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

2 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1GC: Garbage-First Garbage Collector

Владимир ИвановOracle [email protected]

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

3 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Содержание

• Основы сборки мусора

• G1: обзор архитектуры

• Миграция на G1

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

4 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, ...

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

5 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Сборка мусора: до

B

Heap

C

D

G

H

IE

K

MJ

A

F

RuntimeStack

L

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

6 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Сборка мусора: после

B

Heap

C

D

G

H

IE

K

MJ

A

F

RuntimeStack

L

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

7 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Сборка мусора с поколениями

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

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

поколения• Mолодое поколение можно собирать отдельно от старого

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

8 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Сборка мусора с поколениями

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

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

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

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

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

9 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Структура молодого поколения

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

10 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Молодое поколение: сборка мусора

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

11 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Молодое поколение: сборка мусора

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

12 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Содержание

• Основы сборки мусора

• G1: обзор архитектуры

• Миграция на G1

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

13 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Garbage-First GC (G1)

• Фоновый и параллельный

• Высокая предсказуемость работы

• Сборщик мусора с поколениями, но …• «Куча» состоит из регионов• Нет физического разделения между молодым и старым

поколением• Принадлежность регионов определяется динамически• Для каждого региона известно где находятся объекты,

ссылающиеся на него• “Remembered Set”• Позволяет собирать регионы независимо

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

14 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Структура «кучи»

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

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

15 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Структура «кучи»

• Молодое поколение• Набор регионов

• Eden• Survivor

• Выбираются динамически

E

S

S

E

E

E

E

E

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

16 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Структура «кучи»

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

S

S

E

E

E

E

E

E

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

17 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Структура «кучи»

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

смежных регионов

H

S

S

H

H

E

E

E

E

E

E

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

18 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

S

G1: Структура «кучи»

• Collection Set• Регионы, в которых будет

происходить GC• Все молодое поколение• Некоторые регионы из

старшего поколения• Фоновая маркировка

определяет наиболее подходящие

S

H

H

H

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

19 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

H

H

S

G1: Структура «кучи»

• Сборка• Копирование объектов в

регионы, помеченные как часть «To»-пространства• Survivor-регионы• Регионы из старшего

поколенияS

SH

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

20 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Структура «кучи»

• Reclamation• From-space larger than to-

space (hopefully!)• Compaction via copying

S

H

H

H

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

21 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

E

H

H

S

G1: Структура «кучи»

• RSet == Remembered Set• Информация о

местонахождении ссылок на регион

• Позволяет собирать регионы независимо

• RSet поддерживается • Из старого в молодое

поколение• Между регионами в старом

поколении

H

RS

RS

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

22 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Фоновая маркировка

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

объектов

• Параллельная и фоновая

• Стартует автоматически по достижении пороговой занятости «кучи»

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

23 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;

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

24 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Барьеры на запись

• 2 типа• Pre-barrier

• Сохраняет старое значение поля• Поддерживается корректность фоновой маркировки• SATB (Snapshot-At-The-Beginning)

• Post-barrier• Поддержка актуальности RSet

• Результат сохраняется в буферы, локальные для потока• В процессе фоновой сборки происходит обработка

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

25 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1: Как включить?

• -XX:+UseG1GC

• -Xms/-Xmx

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

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

26 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Содержание

• Основы сборки мусора

• G1: обзор архитектуры

• Миграция на G1

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

27 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

GCs в Hotspot JVM

PSOld PSParOld

DefNew ParNew

Tenured

GC Framework GC Interface

YoungGen

WholeHeap

Parallel / Concurrent

Serial Parallel

CMS

Serial Parallel

G1

OldGen

PScavenge

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

28 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

GC в Hotspot JVM

• SerialGC• последовательная сборка молодого и старого поколений

• ParallelGC• максимальный throughput• параллельная сборка молодого и старого поколений

• CMS• предсказуемость• по возможности, сборка мусора в фоновом режиме

• G1• предсказуемость• слабо подвержен фрагментации

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

29 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность GC

• 3 характеристики• Throughput

• Объем вычислительных ресурсов, затрачиваемых на GC

• Предсказуемость• На какое время прерывается работа приложения

• Footprint• Объем используемой памяти

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

30 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Производительность GC

Throughput

FootprintLatency =

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

31 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Чем хорош Stop-The-World GC?

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

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

некорректном состоянии

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

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

32 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Инкрементальная сборка

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

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

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

33 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

Предсказуемость vs Throughput

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

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

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

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

34 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1 рекомендуется, если…

• Нужна хорошая производительность

• Минимальная настройка

• Размер «кучи» >2-4Gb

• Занятость «кучи» >50%

• Продолжительность пауз (<0.5-1s)

• Скорость создания объектов серьезно варьируется

• Фрагментация «кучи»

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

35 Copyright © 2012, Oracle and/or its affiliates. All rights reserved.

G1 НЕ рекомендуется, если

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

• Жесткие требования на паузы <100мс

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

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

Как выбирать GC?

1. ParallelGC

2. G1 DONE!

3. CMS

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

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

Подходит? Да!

Подходит? Да!

Подходит? Да!

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

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

Q&A

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

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

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

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