Submit Search
Upload
Управление памятью в Java: Footprint
•
4 likes
•
2,602 views
Vladimir Ivanov
Follow
@ J1 2012 Moscow
Read less
Read more
Technology
Report
Share
Report
Share
1 of 28
Download Now
Download to read offline
Recommended
G1 GC: Garbage-First Garbage Collector
G1 GC: Garbage-First Garbage Collector
Vladimir Ivanov
良いプレゼン 良いスライド
良いプレゼン 良いスライド
京大 マイコンクラブ
Полезное покрытие кода
Полезное покрытие кода
SQALab
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
#ITsubbotnik Spring 2017: Sergey Chernolyas "JPA for NoSQL"
epamspb
Oracle Big Data proposition
Oracle Big Data proposition
Andrey Akulov
Oracle. Моторин Иларион. "Современные и перспективные системы на базе процесс...
Oracle. Моторин Иларион. "Современные и перспективные системы на базе процесс...
Expolink
Введение в веб каркас Struts2
Введение в веб каркас Struts2
Evgeniy Krivosheev
More Related Content
Similar to Управление памятью в Java: Footprint
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших Данных
Andrey Akulov
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
GetITAbroad
MySQL 8.0
MySQL 8.0
Vittorio Cioe
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Alexander Syrotenko
Oracle Big Data. Обзор технологий
Oracle Big Data. Обзор технологий
Andrey Akulov
Многоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVM
Vladimir Ivanov
Database as a Service
Database as a Service
Andrey Akulov
Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данных
Andrey Akulov
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
Media Gorod
Enterprise or not to enterprise
Enterprise or not to enterprise
Alex Tumanoff
Enterprise or not to enterprise
Enterprise or not to enterprise
Alex Tumanoff
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
Pavel Tsukanov
MySQL NDB Cluster
MySQL NDB Cluster
Vittorio Cioe
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
Vladimir Ivanov
Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014
Andrey Akulov
Защита информации на уровне СУБД
Защита информации на уровне СУБД
Andrey Akulov
Fors и big data appliance
Fors и big data appliance
CleverDATA
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Alexander Makarov
Big Data
Big Data
mikeshagiev
Big data
Big data
mikeshagiev
Similar to Управление памятью в Java: Footprint
(20)
Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших Данных
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
MySQL 8.0
MySQL 8.0
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Oracle Big Data. Обзор технологий
Oracle Big Data. Обзор технологий
Многоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVM
Database as a Service
Database as a Service
Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данных
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
Enterprise or not to enterprise
Enterprise or not to enterprise
Enterprise or not to enterprise
Enterprise or not to enterprise
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
MySQL NDB Cluster
MySQL NDB Cluster
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014
Защита информации на уровне СУБД
Защита информации на уровне СУБД
Fors и big data appliance
Fors и big data appliance
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Big Data
Big Data
Big data
Big data
More from Vladimir Ivanov
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
Vladimir Ivanov
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
Vladimir Ivanov
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
Vladimir Ivanov
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
Vladimir Ivanov
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
Vladimir Ivanov
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
Vladimir Ivanov
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
Vladimir Ivanov
More from Vladimir Ivanov
(7)
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"What's New in HotSpot JVM 8" @ JPoint 2014, Moscow, Russia
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"Formal Verification in Java" by Shura Iline, Vladimir Ivanov @ JEEConf 2013,...
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
Управление памятью в 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.
Download Now