SlideShare a Scribd company logo
Системы
управления памятью в JVM




             Николай Иготти
Требования к системе
  управления памятью в Java
• Стандарт не специфицирует алгоритмы управления
  памятью, но налагает требования:
    Память всегда выделяется под объект (явно или
     неявно)
    Память всегда инициализируется в значения по
     умолчанию
    Для завершения инициализации должен вызывться
     конструктор
    Память (возможно) освобождается при
     недоступности объекта, weak references
    Не допускается алиасинг (перекрытие памяти
     объектов)
    equals() и hashCode()
    При недостатке памяти бросается исключение
     java.lang.OutOfMemoryError и его можно поймать
    При освобождении объекта вызывается
     protected void finalize() throws Throwable
                                                      2
Фазы жизни объекта

• Участок в хипе
• Память выделенная аллокатором
  (заполнена нулями)
• Инициализированный объект
• Недостижимый объект (а как с классами?)
• Финализируемый объект
• Фантомный объект
• Участок в хипе



                                            3
Достижимость
• Rootset – корневые объекты
   Объекты на стеке Ява
   Глобальные переменные Ява (какие?)
   Структуры данных ВМ
   Регистры процессора содержащие ссылки
   Ещѐ?
• Достижимо транзитивное замыкание
  корневых объектов по отношению “иметь
  ссылку”
• Собирать можно (а всегда ли нужно?)
  дополнение множества достижимых
  объектов - мусор

                                            4
Слабые ссылки, финализация,
хэш-код
• Типы ссылок:
     Сильная (обычная ссылка на объект
      foo.bar)
     Мягкая (soft) java.lang.ref.SoftReference
     Слабая (weak)
      java.lang.ref.WeakReference
     Фантомная (phantom)
      java.lang.ref.PhantomReference
•   java.lang.Object.finalize()
• Разные политики обработки коллектором,
  интерфейс между коллектором и Ява-кодом
• Стабильность хэшкода
                                                  5
Факторы учитываемые при
 создании коллектора
• Требования по объѐму данных
• Требования по производительности (с какой
  скоростью может создаваться мусор)
• Требования по времени жизни приложения
  (серверные программы могут работать
  годами)
• Требования по гарантии на время отклика
  (мягкие, жѐсткие)
• Ожидаемые сценарии нагрузки
• Ожидаемое аппаратное обеспечение

                                              6
Информация о типичном
поведении
• Анализ реальных систем показал:
   Большинство объектов “умирают
    молодыми” (generational hypothesis)
   Объекты делятся на несколько категорий с
    различным временем жизни
   Потоки используют, в основном, данные
    которые сами создают
   Немногие объекты используются для
    синхронизации
   Немногие объекты хранятся в хэшах (а
    следовательно, требуют стабильного хэш-
    кода)
   Взаимоотносящиеся объекты ссылаются
    друг на друга
                                           7
Реализации коллектора
(китайская классификация)
• Подсчѐт ссылок, удаление при 0
• Точные/приближѐнные
• Копирование живых объектов (semi-space)
• Пометить-вычистить
• Останавливающие/инкрементальные
• Реального времени
• С учѐтом гипотезы поколений
• С учѐтом потоковой локальности
• Комбинированные

                                            8
Вопросы

• Стековые переменные – это явное
  или неявное освобождение памяти?
• Какие проблемы и преимущества внѐс
  бы в Яву алиасинг?
• Как влияет поддержка мягких и
  слабых ссылок на дизайн коллектора?
• Всегда ли наблюдается “типичное”
  поведение? Что, если нет?


                                     9

More Related Content

Viewers also liked

20081026 structuralcomplexitytheory lecture05-06
20081026 structuralcomplexitytheory lecture05-0620081026 structuralcomplexitytheory lecture05-06
20081026 structuralcomplexitytheory lecture05-06Computer Science Club
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Atlantida el continente perdido de Platón
Atlantida el continente perdido de PlatónAtlantida el continente perdido de Platón
Atlantida el continente perdido de Platón
Choi Ha Young
 
Ficha 1 93 ruben cruz e stone costa
Ficha 1 93 ruben cruz e stone costaFicha 1 93 ruben cruz e stone costa
Ficha 1 93 ruben cruz e stone costa
nonoano_terceira
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
ANNA KARLA MOURA
ANNA KARLA MOURAANNA KARLA MOURA
ANNA KARLA MOURA
gtci_rtd6
 

Viewers also liked (7)

20081026 structuralcomplexitytheory lecture05-06
20081026 structuralcomplexitytheory lecture05-0620081026 structuralcomplexitytheory lecture05-06
20081026 structuralcomplexitytheory lecture05-06
 
Bachelor degree
Bachelor degreeBachelor degree
Bachelor degree
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Atlantida el continente perdido de Platón
Atlantida el continente perdido de PlatónAtlantida el continente perdido de Platón
Atlantida el continente perdido de Platón
 
Ficha 1 93 ruben cruz e stone costa
Ficha 1 93 ruben cruz e stone costaFicha 1 93 ruben cruz e stone costa
Ficha 1 93 ruben cruz e stone costa
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
ANNA KARLA MOURA
ANNA KARLA MOURAANNA KARLA MOURA
ANNA KARLA MOURA
 

Similar to 20100228 virtualization igotti_lecture03

Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaAndrei Pangin
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгинkuchinskaya
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
Nikita Lipsky
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
Alexander Syrotenko
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objectscolriot
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
Nikita Lipsky
 
Android для начинающих. занятие 1
Android для начинающих. занятие 1Android для начинающих. занятие 1
Android для начинающих. занятие 1
SCINO
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
Gennady Zavyalov
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
Alex Chistyakov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Ontico
 
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинПроект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
EYevseyeva
 
20100307 virtualization igotti_lecture04
20100307 virtualization igotti_lecture0420100307 virtualization igotti_lecture04
20100307 virtualization igotti_lecture04Computer Science Club
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
odnoklassniki.ru
 
Анатолий Кондратьев, Exigen Services
Анатолий Кондратьев, Exigen ServicesАнатолий Кондратьев, Exigen Services
Анатолий Кондратьев, Exigen Services
Nata_Churda
 
Apache Maven presentation from BitByte conference
Apache Maven presentation from BitByte conferenceApache Maven presentation from BitByte conference
Apache Maven presentation from BitByte conference
Return on Intelligence
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Fedor Lavrentyev
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
Sveta Bozhko
 

Similar to 20100228 virtualization igotti_lecture03 (20)

Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Java. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and ObjectsJava. Lecture 02. Classes and Objects
Java. Lecture 02. Classes and Objects
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Android для начинающих. занятие 1
Android для начинающих. занятие 1Android для начинающих. занятие 1
Android для начинающих. занятие 1
 
объектно ориентированная платформа для построения
объектно ориентированная платформа для построенияобъектно ориентированная платформа для построения
объектно ориентированная платформа для построения
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)Выжимаем из сервера максимум (Андрей Паньгин)
Выжимаем из сервера максимум (Андрей Паньгин)
 
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей ПаньгинПроект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
 
20100307 virtualization igotti_lecture04
20100307 virtualization igotti_lecture0420100307 virtualization igotti_lecture04
20100307 virtualization igotti_lecture04
 
Незаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервераНезаурядная Java как инструмент разработки высоконагруженного сервера
Незаурядная Java как инструмент разработки высоконагруженного сервера
 
Анатолий Кондратьев, Exigen Services
Анатолий Кондратьев, Exigen ServicesАнатолий Кондратьев, Exigen Services
Анатолий Кондратьев, Exigen Services
 
Apache Maven presentation from BitByte conference
Apache Maven presentation from BitByte conferenceApache Maven presentation from BitByte conference
Apache Maven presentation from BitByte conference
 
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev FedorProgramming Java - Lection 01 - Basics - Lavrentyev Fedor
Programming Java - Lection 01 - Basics - Lavrentyev Fedor
 
HighLoad systems: tips & tricks
HighLoad systems: tips & tricksHighLoad systems: tips & tricks
HighLoad systems: tips & tricks
 

More from Computer Science Club

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
Computer Science Club
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
Computer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
Computer Science Club
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
Computer Science Club
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12Computer Science Club
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
Computer Science Club
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10Computer Science Club
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09Computer Science Club
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02Computer Science Club
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01Computer Science Club
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04Computer Science Club
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01Computer Science Club
 

More from Computer Science Club (20)

20141223 kuznetsov distributed
20141223 kuznetsov distributed20141223 kuznetsov distributed
20141223 kuznetsov distributed
 
Computer Vision
Computer VisionComputer Vision
Computer Vision
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs20140531 serebryany lecture02_find_scary_cpp_bugs
20140531 serebryany lecture02_find_scary_cpp_bugs
 
20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs20140531 serebryany lecture01_fantastic_cpp_bugs
20140531 serebryany lecture01_fantastic_cpp_bugs
 
20140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture1220140511 parallel programming_kalishenko_lecture12
20140511 parallel programming_kalishenko_lecture12
 
20140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture1120140427 parallel programming_zlobin_lecture11
20140427 parallel programming_zlobin_lecture11
 
20140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture1020140420 parallel programming_kalishenko_lecture10
20140420 parallel programming_kalishenko_lecture10
 
20140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture0920140413 parallel programming_kalishenko_lecture09
20140413 parallel programming_kalishenko_lecture09
 
20140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture0220140329 graph drawing_dainiak_lecture02
20140329 graph drawing_dainiak_lecture02
 
20140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture0120140329 graph drawing_dainiak_lecture01
20140329 graph drawing_dainiak_lecture01
 
20140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-0420140310 parallel programming_kalishenko_lecture03-04
20140310 parallel programming_kalishenko_lecture03-04
 
20140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-0320140223-SuffixTrees-lecture01-03
20140223-SuffixTrees-lecture01-03
 
20140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture0120140216 parallel programming_kalishenko_lecture01
20140216 parallel programming_kalishenko_lecture01
 
20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich20131106 h10 lecture6_matiyasevich
20131106 h10 lecture6_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich20131027 h10 lecture5_matiyasevich
20131027 h10 lecture5_matiyasevich
 
20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich20131013 h10 lecture4_matiyasevich
20131013 h10 lecture4_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 
20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich20131006 h10 lecture3_matiyasevich
20131006 h10 lecture3_matiyasevich
 

20100228 virtualization igotti_lecture03

  • 2. Требования к системе управления памятью в Java • Стандарт не специфицирует алгоритмы управления памятью, но налагает требования:  Память всегда выделяется под объект (явно или неявно)  Память всегда инициализируется в значения по умолчанию  Для завершения инициализации должен вызывться конструктор  Память (возможно) освобождается при недоступности объекта, weak references  Не допускается алиасинг (перекрытие памяти объектов)  equals() и hashCode()  При недостатке памяти бросается исключение java.lang.OutOfMemoryError и его можно поймать  При освобождении объекта вызывается protected void finalize() throws Throwable 2
  • 3. Фазы жизни объекта • Участок в хипе • Память выделенная аллокатором (заполнена нулями) • Инициализированный объект • Недостижимый объект (а как с классами?) • Финализируемый объект • Фантомный объект • Участок в хипе 3
  • 4. Достижимость • Rootset – корневые объекты  Объекты на стеке Ява  Глобальные переменные Ява (какие?)  Структуры данных ВМ  Регистры процессора содержащие ссылки  Ещѐ? • Достижимо транзитивное замыкание корневых объектов по отношению “иметь ссылку” • Собирать можно (а всегда ли нужно?) дополнение множества достижимых объектов - мусор 4
  • 5. Слабые ссылки, финализация, хэш-код • Типы ссылок:  Сильная (обычная ссылка на объект foo.bar)  Мягкая (soft) java.lang.ref.SoftReference  Слабая (weak) java.lang.ref.WeakReference  Фантомная (phantom) java.lang.ref.PhantomReference • java.lang.Object.finalize() • Разные политики обработки коллектором, интерфейс между коллектором и Ява-кодом • Стабильность хэшкода 5
  • 6. Факторы учитываемые при создании коллектора • Требования по объѐму данных • Требования по производительности (с какой скоростью может создаваться мусор) • Требования по времени жизни приложения (серверные программы могут работать годами) • Требования по гарантии на время отклика (мягкие, жѐсткие) • Ожидаемые сценарии нагрузки • Ожидаемое аппаратное обеспечение 6
  • 7. Информация о типичном поведении • Анализ реальных систем показал:  Большинство объектов “умирают молодыми” (generational hypothesis)  Объекты делятся на несколько категорий с различным временем жизни  Потоки используют, в основном, данные которые сами создают  Немногие объекты используются для синхронизации  Немногие объекты хранятся в хэшах (а следовательно, требуют стабильного хэш- кода)  Взаимоотносящиеся объекты ссылаются друг на друга 7
  • 8. Реализации коллектора (китайская классификация) • Подсчѐт ссылок, удаление при 0 • Точные/приближѐнные • Копирование живых объектов (semi-space) • Пометить-вычистить • Останавливающие/инкрементальные • Реального времени • С учѐтом гипотезы поколений • С учѐтом потоковой локальности • Комбинированные 8
  • 9. Вопросы • Стековые переменные – это явное или неявное освобождение памяти? • Какие проблемы и преимущества внѐс бы в Яву алиасинг? • Как влияет поддержка мягких и слабых ссылок на дизайн коллектора? • Всегда ли наблюдается “типичное” поведение? Что, если нет? 9