Управление памятью в java: footprint
DESCRIPTION
@ J1 2012 MoscowTRANSCRIPT
![Page 1: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/2.jpg)
2 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Управление памятью в Java: footprint
Владимир Иванов
Oracle Corporation
![Page 3: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/3.jpg)
3 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 4: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/5.jpg)
5 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 6: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/6.jpg)
6 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Стуктура «кучи» в Java
![Page 7: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/8.jpg)
8 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 9: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/11.jpg)
11 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 12: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/14.jpg)
14 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 15: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/15.jpg)
15 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Инженерная проблема Кэширование данных
• Приложение оперирует объемами данных,
существенно превышающими доступную память
• Требуется организовать кэширование на уровне
приложения
![Page 16: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/25.jpg)
25 Copyright © 2012, Oracle and/or its affiliates. All rights
reserved.
Insert Informaion Protection Policy Classification from Slide 7
Содержание
• Введение
• Структура «кучи» в Java
• «Сжатые» указатели
• Представление объекта в памяти
• Типы ссылок
• Итоги
![Page 26: Управление памятью в Java: Footprint](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013118/5478eb135906b594048b4608/html5/thumbnails/28.jpg)
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