SlideShare a Scribd company logo
1 of 28
Download to read offline
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

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

Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхAndrey Akulov
 
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?GetITAbroad
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned 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. Обзор технологийOracle Big Data. Обзор технологий
Oracle Big Data. Обзор технологийAndrey Akulov
 
Многоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVMМногоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVMVladimir Ivanov
 
Database as a Service
Database as a ServiceDatabase as a Service
Database as a ServiceAndrey Akulov
 
Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данныхНовые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данныхAndrey Akulov
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийMedia Gorod
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterpriseAlex Tumanoff
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterpriseAlex Tumanoff
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine "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Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014Andrey Akulov
 
Защита информации на уровне СУБД
Защита информации на уровне СУБДЗащита информации на уровне СУБД
Защита информации на уровне СУБДAndrey Akulov
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data applianceCleverDATA
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiAlexander Makarov
 

Similar to Управление памятью в Java: Footprint (20)

Технологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших ДанныхТехнологии и продукты Oracle для обработки и анализа Больших Данных
Технологии и продукты Oracle для обработки и анализа Больших Данных
 
Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?Что такое Java? Кто такой Java разработчик?
Что такое Java? Кто такой Java разработчик?
 
MySQL 8.0
MySQL 8.0MySQL 8.0
MySQL 8.0
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Oracle Big Data. Обзор технологий
Oracle Big Data. Обзор технологийOracle Big Data. Обзор технологий
Oracle Big Data. Обзор технологий
 
Многоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVMМногоуровневая компиляция в HotSpot JVM
Многоуровневая компиляция в HotSpot JVM
 
Database as a Service
Database as a ServiceDatabase as a Service
Database as a Service
 
Новые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данныхНовые возможности платформы Oracle 12c для хранилищ данных
Новые возможности платформы Oracle 12c для хранилищ данных
 
Проверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложенийПроверено и работает. Инструменты Oracle для разработки веб приложений
Проверено и работает. Инструменты Oracle для разработки веб приложений
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterprise
 
Enterprise or not to enterprise
Enterprise or not to enterpriseEnterprise or not to enterprise
Enterprise or not to enterprise
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
MySQL NDB Cluster
MySQL NDB ClusterMySQL NDB Cluster
MySQL NDB Cluster
 
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine
"Optimizing Memory Footprint in Java" @ JEEConf 2013, Kiev, Ukraine "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Новости и анонсы Oracle Open World 2014
Новости и анонсы Oracle Open World 2014
 
Защита информации на уровне СУБД
Защита информации на уровне СУБДЗащита информации на уровне СУБД
Защита информации на уровне СУБД
 
Fors и big data appliance
Fors и big data applianceFors и big data appliance
Fors и big data appliance
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
 
Big Data
Big DataBig Data
Big Data
 
Big data
Big dataBig 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 "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,..."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"JIT compiler overview" @ JEEConf 2013, Kiev, Ukraine
"JIT compiler overview" @ JEEConf 2013, Kiev, UkraineVladimir Ivanov
 
JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013Vladimir Ivanov
 
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013Vladimir Ivanov
 
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012
"G1 GC и Обзор сборки мусора в HotSpot JVM" @ JUG SPb, 31-05-2012Vladimir Ivanov
 
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)
"Диагностирование проблем и настройка GC в HotSpot JVM" (JEEConf, Киев, 2011)"Диагностирование проблем и настройка 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 "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,..."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"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 2013JVM JIT-compiler overview @ JavaOne Moscow 2013
JVM JIT-compiler overview @ JavaOne Moscow 2013
 
"Invokedynamic: роскошь или необходимость?"@ JavaOne Moscow 2013
"Invokedynamic: роскошь или необходимость?"@ 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"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)"Диагностирование проблем и настройка 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.