SlideShare a Scribd company logo
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.
Управление памятью в 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.
Содержание


    •      Введение
    •      Структура «кучи» в Java
    •      «Сжатые» указатели
    •      Представление объекта в памяти
    •      Типы ссылок
    •      Итоги




3       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
        reserved.
Введение
    О чем пойдет речь?

    • Производительность GC
    • 3 характеристики
         • Throughput
                  • Объем вычислительных ресурсов, затрачиваемых на GC
         • Предсказуемость
                  • На какое время прерывается работа приложения
         • Footprint
                  • Объем используемой памяти




4   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
    reserved.
Содержание


    •      Введение
    •      Структура «кучи» в Java
    •      «Сжатые» указатели
    •      Представление объекта в памяти
    •      Типы ссылок
    •      Итоги




5       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
        reserved.
Стуктура «кучи» в Java




6   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
    reserved.
Критерии выбора размера хипа


    • Чем больше памяти, тем лучше для GC
         • Как для молодого, так и для старшего поколения
         • Более редкие сборки
         • Ниже затраты на сборку мусора


    • Доступный объем памяти ограничен
         • Физическая память
         • 32-битный режим
         • Наличие других приложений в системе




7   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
    reserved.
Содержание


    •      Введение
    •      Структура «кучи» в Java
    •      «Сжатые» указатели
    •      Представление объекта в памяти
    •      Типы ссылок
    •      Итоги




8       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
        reserved.
«Сжатые» указатели
    -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.
«Сжатые» указатели
     -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.
Содержание


     •      Введение
     •      Структура «кучи» в Java
     •      «Сжатые» указатели
     •      Представление объекта в памяти
     •      Типы ссылок
     •      Итоги




11       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
         reserved.
Представление объекта в памяти


     • Заголовок (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.
Представление объекта


• 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.
Содержание


     •      Введение
     •      Структура «кучи» в Java
     •      «Сжатые» указатели
     •      Представление объекта в памяти
     •      Типы ссылок
     •      Итоги




14       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
         reserved.
Инженерная проблема
     Кэширование данных

     • Приложение оперирует объемами данных,
       существенно превышающими доступную память
     • Требуется организовать кэширование на уровне
       приложения




15   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
     reserved.
Типы ссылок в 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.
Типы ссылок в 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.
Типы ссылок в 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.
Типы ссылок
     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.
Типы ссылок
     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.
Типы ссылок
     PhantomReference

     • Замена финализаторам
     • Невозможно получить ссылку на объект
          �� PhantomReference.get() == null
     • GC помещает «фантомные» ссылки в очередь




21   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
     reserved.
Типы ссылок
     Чем плохи финализаторы?

     • Замедление аллокации
              – Требуется регистрация объектов с нетривиальными
                финализаторами
     •      2 цикла GC для удаления объекта
     •      Возможность «воскрешения» объекта
     •      Недетерминированный порядок исполнения
     •      Могут начать выполняться раньше чем кажется
     •      Многопоточность (даже в однопоточном приложении)
              – Требуется синхронизация при доступе к структурам данных




22       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
         reserved.
Типы ссылок в 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.
Типы ссылок в Java
     Автоматическая очиста ссылок

     • «Мягкие» и «слабые» ссылки
          • Автоматически очищаются GC перед добавлением в очередь
          • Регистрация в очереди не обязательна
     • «Фантомные» ссылки
          • Обязаны быть зарегистрированы в очереди
          • Объект остается phantom-достижим пока все достижимые
            «фантомные» ссылки не очищены




24   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
     reserved.
Содержание


     •      Введение
     •      Структура «кучи» в Java
     •      «Сжатые» указатели
     •      Представление объекта в памяти
     •      Типы ссылок
     •      Итоги




25       Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
         reserved.
Итоги


     • Для комфортной работы 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.
Q&A



27   Copyright © 2012, Oracle and/or its affiliates. All rights   Insert Informaion Protection Policy Classification from Slide 7
     reserved.
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.

More Related Content

Управление памятью в 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.