"g1 gc и Обзор сборки мусора в hotspot jvm" @ jug spb, 31-05-2012

51
Copyright © 2012, Oracle and/or its affiliates. All rights reserved. G1GC: Garbage-First Garbage Collector Владимир Иванов Oracle Corporation [email protected]

Upload: vladimir-ivanov

Post on 29-Nov-2014

3.815 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

G1GC: Garbage-First Garbage Collector

Владимир Иванов

Oracle Corporation

[email protected]

Page 2: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 3: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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 4: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

B

Heap

C

D

G

H

I E

K

M J

A

F

Runtime

Stack

L

Page 5: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

B

Heap

C

D

G

H

I E

K

M J

A

F

Runtime

Stack

L

Page 6: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Слабая гипотеза о поколениях

– Большинство объектов временные

– Старые объекты редко ссылаются на молодые

• Молодые и старые объекты содержатся отдельно

– В пространствах, называемых “поколения” (generations)

– Возможны разные алгоритмы для молодого и старого

поколения

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

Page 7: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

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

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

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

Создание объекта Необходимо

отслеживать ссылки

Page 8: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

Page 9: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

Page 10: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

Page 11: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Понятие «производительности» для GC

• Различные подходы к сборке мусора

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 12: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

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

• Throughput

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

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

• На какое время прерывается работа приложения

• Footprint

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

Page 13: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Производительность GC Оптимизируйте по 2 из 3

Throughput

Footprint Latency

Page 14: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Производительность GC Выбор стратегии

Throughput

Footprint Latency =

Page 15: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Производительность GC Изменение размера «кучи»

Throughput

Footprint Latency

Page 16: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Понятие «производительности» для GC

• Различные подходы к сборке мусора

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 17: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Проще всего определять достижимость объектов

– Граф объектов «заморожен»

• Проще всего перемещать объекты в «куче»

– В процессе сборки, «куча» может находиться в некорректном

состоянии

• Но:

– Приложение останавливается на все время сборки

– зависит от размера «кучи» / объема живых объектов

Page 18: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Попытка уменьшить паузы, вызванные GC, за счет

– Большего количества коротких пауз

– Фоновая сборка

• Требуется синхронизировать работу GC с

приложением

– Барьеры на чтение/запись

Page 19: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• STW

– Продолжительные паузы

– … но никакой лишней нагрузки для потоков приложения

– Максимальный throughput

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

– Короткие паузы

– Лишняя нагруза в потоках приложения

– Минимальные паузы за счет снижения throughput

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

Page 20: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 21: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

GC в Hotspot JVM Взгляд изнутри

PSOld PSParOld

DefNew ParNew

Tenured

GC Framework GC Interface

Young

Gen

Whole

Heap

Parallel /

Concurrent Serial Parallel

CMS

Serial Parallel

G1

Old

Gen

PScavenge

Page 22: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

GC в Hotspot JVM Взгляд извне

• SerialGC

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

• ParallelGC

– максимальный throughput

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

• CMS

– предсказуемость

– по возможности, сборка мусора в фоновом режиме

• G1

– предсказуемость

– слабо подвержен фрагментации

Page 23: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

SerialGC

• Молодое поколение: последовательный копирующий GC

• Старшее поколение: последовательный Mark-Sweep-Compact

– Аллокация: линейная

• -XX:+UseSerialGC

Page 24: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

ParallelGC

• Молодое поколение: параллельный копирующий

• Старшее поколение: параллельный Mark-Compact

– Аллокация: линейная

• -XX:+UseParallelGC -XX:+UseParallelOldGC

Page 25: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

CMS

• Молодое поколение: параллельный копирующий GC

• Старшее поколение: фоновый Mark-Sweep GC

– Аллокация: free-листы

– Компактификация только при FullGC

• -XX:+UseConcMarkSweepGC

Page 26: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 27: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Garbage-First GC (G1)

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

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

• Сборщик мусора с поколениями, но …

• «Куча» состоит из регионов

• Нет физического разделения между молодым и старым

поколением

• Принадлежность регионов определяется динамически

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

ссылающиеся на него

• “Remembered Set”

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

Page 28: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Разбита на регионы

• Фиксированного размера

• 1MB-32MB

Разбита на регионы

• Фиксированного размера

• 1MB-32MB

Page 29: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

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

• Набор регионов

• Eden

• Survivor

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

E

S

S

E

E

E

E

E

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

• Набор регионов

• Eden

• Survivor

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

Page 30: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

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

– Набор регионов

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

S

S

E

E

E

E

E

E

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

• Набор регионов

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

Page 31: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

H

S

S

H

H

E

E

E

E

E

E

Большие объекты

• Не помещается в регион

• Называется “humongous”

• Хранится в наборе

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

Page 32: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

S

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

S

H

H

H Collection Set

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

происходить GC

• Все молодое поколение

• Некоторые регионы из

старшего поколения

• Фоновая маркировка

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

подходящие

Page 33: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

S

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

S

H

H

H Типы сборок

• В молодом поколении

• Смешанные (mixed)

• FullGC

Page 34: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

H

H

S

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

S

S H

Сборка

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

регионы, помеченные как

часть «To»-пространства

• Survivor-регионы

• Регионы из старшего

поколения

Page 35: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

S

H

H

H

Освобождение памяти

• From-space больше чем To-

space (не обязательно!)

• Компактификация за счет

копирования

Page 36: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

E

H

H

S

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

H

RS

RS

• RSet == Remembered Set

• Информация о

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

объекты из региона

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

независимо

• RSet поддерживается

• Из старого в молодое

поколение

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

поколении

Page 37: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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 38: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• 2 типа

– Pre-barrier

• Сохраняет старое значение поля

• Поддерживается корректность фоновой маркировки

• SATB (Snapshot-At-The-Beginning)

– Post-barrier

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

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

потока

– В процессе фоновой сборки происходит обработка

Page 39: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Периодически все живые объекты в куче

помечаются

• обновляет информацию о достижимости по регионам

• автоматически освобождает регионы без живых объектов

• разбивает циклические зависимости среди недостижимых

объектов

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

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

занятости «кучи»

Page 40: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• -XX:+UseG1GC

• -Xms/-Xmx

• Задаваемые цели на длительность и частоту пауз

– -XX:MaxGCPauseMillis=<num>

– -XX:GCPauseIntervalMillis=<num>

Page 41: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 42: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

GC в Hotspot JVM Взгляд извне

• SerialGC

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

• ParallelGC

– максимальный throughput

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

• CMS

– предсказуемость

– по возможности, сборка мусора в фоновом режиме

• G1

– предсказуемость

– слабо подвержен фрагментации

Page 43: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Производительность GC Оптимизируйте по 2 из 3

Throughput

Footprint Latency

Page 44: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

G1 рекомендуется, если… … не обязательно все…

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

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

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

• Размер «кучи» >5Gb

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

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

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

Page 45: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

• Приложение уже работает надежно без серьезных

проблем с производительностью

“If it isn't broken, don't fix it!”

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

• Требуется максимальный возможный throughput

• даже в ущерб latency

Page 46: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

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

1. ParallelGC

2. G1 PROFIT!

3. CMS

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

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

«Куча» <2Gb

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

Page 47: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Содержание

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

• Обзор GC в HotSpot JVM

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

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

• Мониторинг работы GC

Page 48: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Диагностический вывод GC

• Параметры VM

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps

-Xloggc:<file>

-XX:+PrintGCDateStamps

-XX:+PrintHeapAtGC

-XX:+PrintTenuringDistribution

• Минимальные накладные расходы

• Анализ диагностического вывода GC

• PrintGCStats

• GChisto

Page 49: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

VisualVM / VisualGC

Page 50: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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

Q&A

Page 51: "G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012

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