Contenu connexe
Similaire à Управление памятью в Java: Footprint (20)
Plus de Vladimir Ivanov (7)
Управление памятью в Java: Footprint
- 1. India
3–4 May 2012
San Francisco
September 30–October 4, 2012
1 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 2. Управление памятью в Java: footprint
Владимир Иванов
Oracle Corporation
2 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
vladimir.x.ivanov@oracle.com
reserved.
- 3. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
3 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 4. Введение
О чем пойдет речь?
• Производительность GC
• 3 характеристики
• Throughput
• Объем вычислительных ресурсов, затрачиваемых на GC
• Предсказуемость
• На какое время прерывается работа приложения
• Footprint
• Объем используемой памяти
4 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 5. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
5 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 6. Стуктура «кучи» в Java
6 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 7. Критерии выбора размера хипа
• Чем больше памяти, тем лучше для GC
• Как для молодого, так и для старшего поколения
• Более редкие сборки
• Ниже затраты на сборку мусора
• Доступный объем памяти ограничен
• Физическая память
• 32-битный режим
• Наличие других приложений в системе
7 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 8. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
8 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 9. «Сжатые» указатели
-XX:+UseCompressedOops
• 32-битные указатели в 64-битном режиме
• oop - Ordinary Object Pointer
Размер < 4Gb >= 4Gb >= 26Gb
«кучи» < 26Gb < 32Gb
Режим Zero-based Zero-based Offset-based
работы non-aligned 8-byte aligned 8-byte aligned
Декоди- не требуется x << 3 offset + x << 3
рование
9 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 10. «Сжатые» указатели
-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
10 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 11. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
11 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 12. Представление объекта в памяти
• Заголовок (12/16/20 байт)
– mark word (4/8 байт)
– Указатель на класс объекта (4/8 байт)
– Длина (только для массива) (4 байта)
• Нестатические поля класса / элементы массива
12 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 13. Представление объекта
• new int[1000] • new Integer[1000]
• 32-бита: 4+4+4+1000*4 = • 32-бита: 4+4+4+1000*(4+4+4+4) =
4012 байт 16012 байт
• 64-бита: 8+8+4+1000*4 = • 64-бита: 8+8+4+1000*(8+8+8+4) =
4020 байт 28020 байт
13 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 14. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
14 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 15. Инженерная проблема
Кэширование данных
• Приложение оперирует объемами данных,
существенно превышающими доступную память
• Требуется организовать кэширование на уровне
приложения
15 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 16. Типы ссылок в Java
• Декларативный API к GC
• Контроль достижимости
• Представлены в виде объектов
• extends java.lang.ref.Reference
• 3 типа
• «мягкие»
• java.lang.ref.SoftReference
• «слабые»
• java.lang.ref.WeakReference
• «фантомные»
• java.lang.ref.PhantomReference
16 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 17. Типы ссылок в 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);
17 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 18. Типы ссылок в Java
Уровни достижимости
Strongly Softly Weakly Finalizable Phantom
reachable reachable reachable reachable
Unreachable
18 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 19. Типы ссылок
SoftReference
• Удаление softly reachable объекта при нехватке
памяти в системе
• Гарантии
• Все «мягкие» ссылки к soft-достижимым объектам будут
очищены до того, как будет брошен OOME
• Применение
• memory-sensitive caches
• Можно контроллировать агрессивность очистки
• -XX:SoftRefLRUPolicyMSPerMB
19 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 20. Типы ссылок
WeakReference
• Наличие «слабой» ссылки не мешает GC удалить
объект
• Действия GC
• Атомарно очищает все «слабые» ссылки на объект
• Если надо, помещает объекты на финализацию
• Если надо, помещает «слабые» ссылки в очередь
• Использование
• canonicalizing mappings (interned strings)
20 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 21. Типы ссылок
PhantomReference
• Замена финализаторам
• Невозможно получить ссылку на объект
– PhantomReference.get() == null
• GC помещает «фантомные» ссылки в очередь
21 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 22. Типы ссылок
Чем плохи финализаторы?
• Замедление аллокации
– Требуется регистрация объектов с нетривиальными
финализаторами
• 2 цикла GC для удаления объекта
• Возможность «воскрешения» объекта
• Недетерминированный порядок исполнения
• Могут начать выполняться раньше чем кажется
• Многопоточность (даже в однопоточном приложении)
– Требуется синхронизация при доступе к структурам данных
22 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 23. Типы ссылок в Java
Оповещения об изменении достижимости объекта
• Помещение ссылки в очередь
• java.lang.ref.ReferenceQueue
• Получить оповещение, когда объект становится
• softy reachable
• weakly reachable
• phantom reachable
• Невозможно «воскресить» объект из очереди
– Reference.get() == null
23 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 24. Типы ссылок в Java
Автоматическая очиста ссылок
• «Мягкие» и «слабые» ссылки
• Автоматически очищаются GC перед добавлением в очередь
• Регистрация в очереди не обязательна
• «Фантомные» ссылки
• Обязаны быть зарегистрированы в очереди
• Объект остается phantom-достижим пока все достижимые
«фантомные» ссылки не очищены
24 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 25. Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
25 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 26. Итоги
• Для комфортной работы GC требуется достаточно
свободного места в «куче»
• «сжатые» указатели работают только до 32Gb
• Неоптимальное представление данных может
серьезно увеличить расход памяти
• За счет java.lang.ref.* API можно уменьшить расход
памяти приложением
26 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 27. Q&A
27 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.
- 28. India
3–4 May 2012
San Francisco
September 30–October 4, 2012
28 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7
reserved.