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

Post on 28-Nov-2014

1.177 views 5 download

description

 

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

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

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

G1GC: Garbage-First Garbage Collector

Владимир ИвановOracle Corporationvladimir.x.ivanov@oracle.com

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

Содержание

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

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

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

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

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

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

B

Heap

C

D

G

H

IE

K

MJ

A

F

RuntimeStack

L

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

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

B

Heap

C

D

G

H

IE

K

MJ

A

F

RuntimeStack

L

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

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

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

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

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

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.

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

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

Содержание

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

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

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

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

Garbage-First GC (G1)

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

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

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

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

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

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

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

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

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

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

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

• Eden• Survivor

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

E

S

S

E

E

E

E

E

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

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

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

S

S

E

E

E

E

E

E

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

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

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

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

H

S

S

H

H

E

E

E

E

E

E

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

S

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

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

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

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

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

S

H

H

H

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

H

H

S

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

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

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

поколенияS

SH

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

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

E

H

H

S

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

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

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

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

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

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

поколении

H

RS

RS

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

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

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

объектов

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

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

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;

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

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

• 2 типа• Pre-barrier

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

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

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

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

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

• -XX:+UseG1GC

• -Xms/-Xmx

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

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

Содержание

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

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

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

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

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

GC в Hotspot JVM

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

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

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

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

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

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

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

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

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

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

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

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

Throughput

FootprintLatency =

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1. ParallelGC

2. G1 DONE!

3. CMS

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

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

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

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

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

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

Q&A

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

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