Управление памятью в java: footprint

28
1 Copyright © 2012, Oracle and/or its affiliates. All rights reserved. Insert Informaion Protection Policy Classification from Slide 7 India 3 4 May 2012 San Francisco September 30 October 4, 2012

Upload: vladimir-ivanov

Post on 28-Nov-2014

2.963 views

Category:

Technology


3 download

DESCRIPTION

@ J1 2012 Moscow

TRANSCRIPT

Page 1: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

India 3–4 May 2012

San Francisco September 30–October 4, 2012

Page 2: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Управление памятью в Java: footprint

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

Oracle Corporation

[email protected]

Page 3: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 4: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Введение О чем пойдет речь?

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

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

• Throughput

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

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

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

• Footprint

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

Page 5: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 6: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Стуктура «кучи» в Java

Page 7: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Критерии выбора размера хипа

• Чем больше памяти, тем лучше для GC

• Как для молодого, так и для старшего поколения

• Более редкие сборки

• Ниже затраты на сборку мусора

• Доступный объем памяти ограничен

• Физическая память

• 32-битный режим

• Наличие других приложений в системе

Page 8: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 9: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

«Сжатые» указатели -XX:+UseCompressedOops

• 32-битные указатели в 64-битном режиме

• oop - Ordinary Object Pointer

Размер

«кучи» < 4Gb >= 4Gb

< 26Gb >= 26Gb < 32Gb

Режим работы

Zero-based non-aligned

Zero-based 8-byte aligned

Offset-based 8-byte aligned

Декоди-рование

не требуется x << 3 offset + x << 3

Page 10: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

«Сжатые» указатели -XX:+UseCompressedOops

• Распаковка «сжатых» указателей дешева

– 64-bit JVM + zero-based COOPs быстрее 32-bit JVM

– 64-bit JVM + offset-based COOPs немного медленнее 64-bit

JVM + zero-based COOPs

• 1 регистр используется для хранения offset

• Работают для «кучи» размером не более 32Gb

• ~1.4x увеличение размера данных если выключены

• скачок: 32Gb -> 45Gb

Page 11: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 12: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Представление объекта в памяти

• Заголовок (12/16/20 байт)

– mark word (4/8 байт)

– Указатель на класс объекта (4/8 байт)

– Длина (только для массива) (4 байта)

• Нестатические поля класса / элементы массива

Page 13: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Представление объекта

• new int[1000]

• 32-бита: 4+4+4+1000*4 =

4012 байт

• 64-бита: 8+8+4+1000*4 =

4020 байт

• new Integer[1000]

• 32-бита: 4+4+4+1000*(4+4+4+4) =

16012 байт

• 64-бита: 8+8+4+1000*(8+8+8+4) =

28020 байт

Page 14: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 15: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Инженерная проблема Кэширование данных

• Приложение оперирует объемами данных,

существенно превышающими доступную память

• Требуется организовать кэширование на уровне

приложения

Page 16: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок в Java

• Декларативный API к GC

• Контроль достижимости

• Представлены в виде объектов

• extends java.lang.ref.Reference

• 3 типа

• «мягкие»

• java.lang.ref.SoftReference

• «слабые»

• java.lang.ref.WeakReference

• «фантомные»

• java.lang.ref.PhantomReference

Page 17: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок в Java Как использовать?

import java.lang.ref.*;

Object obj = new Object(); // strong reference

Reference softRef = new SoftReference(obj); // soft reference

Reference weakRef = new WeakReference(obj); // weak reference

// phantom reference

ReferenceQueue reqQueue = new ReferenceQueue(obj);

Reference phantomRef = new PhantomReference(obj, refQueue);

Page 18: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок в Java Уровни достижимости

Strongly

reachable

Weakly

reachable

Finalizable Softly

reachable

Phantom

reachable

Unreachable

Page 19: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок SoftReference

• Удаление softly reachable объекта при нехватке

памяти в системе

• Гарантии

• Все «мягкие» ссылки к soft-достижимым объектам будут

очищены до того, как будет брошен OOME

• Применение

• memory-sensitive caches

• Можно контроллировать агрессивность очистки

• -XX:SoftRefLRUPolicyMSPerMB

Page 20: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок WeakReference

• Наличие «слабой» ссылки не мешает GC удалить

объект

• Действия GC

• Атомарно очищает все «слабые» ссылки на объект

• Если надо, помещает объекты на финализацию

• Если надо, помещает «слабые» ссылки в очередь

• Использование

• canonicalizing mappings (interned strings)

Page 21: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок PhantomReference

• Замена финализаторам

• Невозможно получить ссылку на объект

– PhantomReference.get() == null

• GC помещает «фантомные» ссылки в очередь

Page 22: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок Чем плохи финализаторы?

• Замедление аллокации

– Требуется регистрация объектов с нетривиальными

финализаторами

• 2 цикла GC для удаления объекта

• Возможность «воскрешения» объекта

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

• Могут начать выполняться раньше чем кажется

• Многопоточность (даже в однопоточном приложении)

– Требуется синхронизация при доступе к структурам данных

Page 23: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок в Java Оповещения об изменении достижимости объекта

• Помещение ссылки в очередь

• java.lang.ref.ReferenceQueue

• Получить оповещение, когда объект становится • softy reachable

• weakly reachable

• phantom reachable

• Невозможно «воскресить» объект из очереди

– Reference.get() == null

Page 24: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Типы ссылок в Java Автоматическая очиста ссылок

• «Мягкие» и «слабые» ссылки

• Автоматически очищаются GC перед добавлением в очередь

• Регистрация в очереди не обязательна

• «Фантомные» ссылки

• Обязаны быть зарегистрированы в очереди

• Объект остается phantom-достижим пока все достижимые

«фантомные» ссылки не очищены

Page 25: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Содержание

• Введение

• Структура «кучи» в Java

• «Сжатые» указатели

• Представление объекта в памяти

• Типы ссылок

• Итоги

Page 26: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Итоги

• Для комфортной работы GC требуется достаточно

свободного места в «куче»

• «сжатые» указатели работают только до 32Gb

• Неоптимальное представление данных может

серьезно увеличить расход памяти

• За счет java.lang.ref.* API можно уменьшить расход

памяти приложением

Page 27: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

Q&A

Page 28: Управление памятью в Java: Footprint

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

reserved.

Insert Informaion Protection Policy Classification from Slide 7

India 3–4 May 2012

San Francisco September 30–October 4, 2012