India                                                                                                                   3–...
Управление памятью в Java: footprint    Владимир Иванов    Oracle Corporation2    Copyright © 2012, Oracle and/or its affi...
Содержание    •      Введение    •      Структура «кучи» в Java    •      «Сжатые» указатели    •      Представление объек...
Введение    О чем пойдет речь?    • Производительность GC    • 3 характеристики         • Throughput                  • Об...
Содержание    •      Введение    •      Структура «кучи» в Java    •      «Сжатые» указатели    •      Представление объек...
Стуктура «кучи» в Java6   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy...
Критерии выбора размера хипа    • Чем больше памяти, тем лучше для GC         • Как для молодого, так и для старшего покол...
Содержание    •      Введение    •      Структура «кучи» в Java    •      «Сжатые» указатели    •      Представление объек...
«Сжатые» указатели    -XX:+UseCompressedOops    • 32-битные указатели в 64-битном режиме    • oop - Ordinary Object Pointe...
«Сжатые» указатели     -XX:+UseCompressedOops     • Распаковка «сжатых» указателей дешева          – 64-bit JVM + zero-bas...
Содержание     •      Введение     •      Структура «кучи» в Java     •      «Сжатые» указатели     •      Представление о...
Представление объекта в памяти     • Заголовок (12/16/20 байт)          – mark word (4/8 байт)          – Указатель на кла...
Представление объекта• new int[1000]                                                                                      ...
Содержание     •      Введение     •      Структура «кучи» в Java     •      «Сжатые» указатели     •      Представление о...
Инженерная проблема     Кэширование данных     • Приложение оперирует объемами данных,       существенно превышающими дост...
Типы ссылок в Java     • Декларативный API к GC          • Контроль достижимости     • Представлены в виде объектов       ...
Типы ссылок в Java     Как использовать?     import java.lang.ref.*;     Object obj = new Object(); // strong reference   ...
Типы ссылок в Java     Уровни достижимости        Strongly                                         Softly                 ...
Типы ссылок     SoftReference     • Удаление softly reachable объекта при нехватке       памяти в системе     • Гарантии  ...
Типы ссылок     WeakReference     • Наличие «слабой» ссылки не мешает GC удалить       объект     • Действия GC          •...
Типы ссылок     PhantomReference     • Замена финализаторам     • Невозможно получить ссылку на объект          – PhantomR...
Типы ссылок     Чем плохи финализаторы?     • Замедление аллокации              – Требуется регистрация объектов с нетриви...
Типы ссылок в Java     Оповещения об изменении достижимости объекта     • Помещение ссылки в очередь          • java.lang....
Типы ссылок в Java     Автоматическая очиста ссылок     • «Мягкие» и «слабые» ссылки          • Автоматически очищаются GC...
Содержание     •      Введение     •      Структура «кучи» в Java     •      «Сжатые» указатели     •      Представление о...
Итоги     • Для комфортной работы GC требуется достаточно       свободного места в «куче»     • «сжатые» указатели работаю...
Q&A27   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification fr...
India                                                                                                                    3...
Upcoming SlideShare
Loading in …5
×

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

3,270 views

Published on

@ J1 2012 Moscow

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,270
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
105
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. India 3–4 May 2012 San Francisco September 30–October 4, 20121 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  2. 2. Управление памятью в Java: footprint Владимир Иванов Oracle Corporation2 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 vladimir.x.ivanov@oracle.com reserved.
  3. 3. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги3 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  4. 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. 5. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги5 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  6. 6. Стуктура «кучи» в Java6 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  7. 7. Критерии выбора размера хипа • Чем больше памяти, тем лучше для GC • Как для молодого, так и для старшего поколения • Более редкие сборки • Ниже затраты на сборку мусора • Доступный объем памяти ограничен • Физическая память • 32-битный режим • Наличие других приложений в системе7 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  8. 8. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги8 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  9. 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. 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 -> 45Gb10 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  11. 11. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги11 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  12. 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. 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. 14. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги14 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  15. 15. Инженерная проблема Кэширование данных • Приложение оперирует объемами данных, существенно превышающими доступную память • Требуется организовать кэширование на уровне приложения15 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  16. 16. Типы ссылок в Java • Декларативный API к GC • Контроль достижимости • Представлены в виде объектов • extends java.lang.ref.Reference • 3 типа • «мягкие» • java.lang.ref.SoftReference • «слабые» • java.lang.ref.WeakReference • «фантомные» • java.lang.ref.PhantomReference16 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  17. 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. 18. Типы ссылок в Java Уровни достижимости Strongly Softly Weakly Finalizable Phantom reachable reachable reachable reachable Unreachable18 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  19. 19. Типы ссылок SoftReference • Удаление softly reachable объекта при нехватке памяти в системе • Гарантии • Все «мягкие» ссылки к soft-достижимым объектам будут очищены до того, как будет брошен OOME • Применение • memory-sensitive caches • Можно контроллировать агрессивность очистки • -XX:SoftRefLRUPolicyMSPerMB19 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  20. 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. 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. 22. Типы ссылок Чем плохи финализаторы? • Замедление аллокации – Требуется регистрация объектов с нетривиальными финализаторами • 2 цикла GC для удаления объекта • Возможность «воскрешения» объекта • Недетерминированный порядок исполнения • Могут начать выполняться раньше чем кажется • Многопоточность (даже в однопоточном приложении) – Требуется синхронизация при доступе к структурам данных22 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  23. 23. Типы ссылок в Java Оповещения об изменении достижимости объекта • Помещение ссылки в очередь • java.lang.ref.ReferenceQueue • Получить оповещение, когда объект становится • softy reachable • weakly reachable • phantom reachable • Невозможно «воскресить» объект из очереди – Reference.get() == null23 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  24. 24. Типы ссылок в Java Автоматическая очиста ссылок • «Мягкие» и «слабые» ссылки • Автоматически очищаются GC перед добавлением в очередь • Регистрация в очереди не обязательна • «Фантомные» ссылки • Обязаны быть зарегистрированы в очереди • Объект остается phantom-достижим пока все достижимые «фантомные» ссылки не очищены24 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  25. 25. Содержание • Введение • Структура «кучи» в Java • «Сжатые» указатели • Представление объекта в памяти • Типы ссылок • Итоги25 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  26. 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. 27. Q&A27 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.
  28. 28. India 3–4 May 2012 San Francisco September 30–October 4, 201228 Copyright © 2012, Oracle and/or its affiliates. All rights Insert Informaion Protection Policy Classification from Slide 7 reserved.

×