SlideShare a Scribd company logo
1 of 25
INSIDE THE JAVA
VIRTUAL MACHINE
Управление памятью и решение
типичных проблем
О чем пойдет речь


•Рассмотрение с точки зрения Java программиста

•Для других программистов и системных
администраторов

•Внутренняя организация памяти JVM
Содержание

•Базовые сведения про Garbage Collector
•Исключительные ситуации OutOfMemory
–Почему они произошли
–Как их исправить
•Некоторые опции для тюнинга VM
•Вопросы и ответы

•Распределение памяти внутри Java machine
•Каждый процесс управляет памятью
•Способы управления памятью в процессе
    o C (malloc() и free())

    o C++(new и delete)

    o Java(new и GC)



•Запускается как отдельный процесс (память между процессами не разделяется)
The JVM Process Heap
Замечание


Опции -Xmx, -Xms и –Xmn влияют только на размер «кучи» Java объектов, но не кучи
самого Java процесса – непонимание этого факта может повлечь неправильное
конфигурирование.(И как результат – ухудшение общей производительности )
Структура памяти JVM процесса
(для 32бит)
Исключительные ситуации

• java.lang.OutOfMemoryError: Java heap space

• java.lang.OutOfMemoryError: PermGen space

• java.lang.OutOfMemoryError: GC overhead limit
  exceeded

• java.lang.OutOfMemoryError: unable to create new
  native thread
Permanent Generation


•Class data sharing (CDS)
         -Xshare:off
-Xshare:on
-Xshare:auto
•String pool
•Метаданные об объектах
Переполнение PermGen


•Библиотеки неявно генерирующие байткод
•Использование java.lang.reflect.Proxy
•Java Reflection API
•Serialization
•RMI

•Библиотеки явно генерирующие байткод
Java Thread Stack

•Память выделяется каждому созданному потоку в
индивидуальное пользование.

•Хранится стек вызова методов, локальные
переменные и параметры.
    o Локальная переменная примитивного типа -

      все данные полностью хранятся на стеке.
    o Объект - ссылка хранится на стеке, сам же

      объект уже создается в куче.
Размеры объектов в памяти
(примитивные типы)

          Java types   bytes required

boolean
                             1
byte

char
                             2
short

int
                             4
float

long
                             8
double
Размеры объектов в памяти

•Обычные объекты занимают минимум 8байт
(служебная информация)

•Массивы занимают минимум 12 байт (8 как
обычный объект и 4 - размер массива)

•Для каждого объект производится выравнивание
по границе 8байт
Размеры объектов в памяти
• Объект с полем типа char занимает 16 байт

Заголовок 8 байт + поле 1 байт + выравнивание 7 байт

• Объект с 8 полями типа char занимает 16 байт

Заголовок 8 байт + 8 полей по 1 байт

• Массив 10x10 int занимает 616 байт

Внешний массив - 52 (после паддинга 56 байт)+
10 внутренних массивов по 56 байт(52 байта до выравнивания)
История Garbage Collector

• Механизм GC был впервые использован Джоном
  Маккарти в языке LISP (1959).

• В последствии часто применялся в
  функциональных и логических ЯП.

• С 1980-х годов технология сборки мусора стала
  использоваться и в директивных, и в объектных
  языках программирования
Немного теории

   Сборщики мусора используют консервативные
оценки, позволяющие определить, что в будущем
объект гарантированно не будет использоваться.

   Обычно критерием того, что объект ещё
используется, является наличие ссылок на него.
Если в системе нет больше ссылок на данный
объект, то он больше не может быть использован
программой и может быть удалён. Этот критерий
используется большинством современных
сборщиков мусора и называется ещё
достижимостью объекта.
Еще немного теории - Алгоритм
«Mark and sweep»
• для каждого объекта есть флаг, указывающий,
  достижим ли этот объект из программы или нет;
• изначально все объекты, кроме корневых,
  помечаются как недостижимые;
• рекурсивно просматриваются и помечаются как
  достижимые объекты ещё не помеченные и до
  которых можно добраться из корневых объектов
  по ссылкам;
• те объекты, у которых флаг достижимости не
  был установлен, считаются недостижимыми.
Ближе к практике – Фазы GC

• Lock it down
   o Все объекты должны быть заблокированы,

     что бы они не изменились в процессе сборки
     мусора
• Mark
   o Пройтись по всем объектам

   o Отметить недостижимые как «мусор»

• Sweep
   o Удалить отмеченные объекты

   o Освободить память
Стратегии GC

• Stop The World
• Incremental
   o Отложить GC до окончания создания новых

      объектов
• Concurrent/Parallel
   o Выделение памяти происходит совместно с

      GC
   o Очень сложные режимы блокировок

   o Поколения объектов

• CMS – Concurrent Mark and Sweep
Стратегии GC
Стратегии GC
Поколения объектов в HotSpot
Как это работает

1. Создается новый объект
2. Если Eden переполнен – минорная сборка

3. Выжившие объекты копируются в 1st survivor

   space
4. Следующий раз при заполнении Eden

• Копируются из Eden в 2nd
• Копируются из 1st в 2nd
5. Если 2nd заполнен и объекты все еще остаются

   в Eden или в 1st
    o Копируются в tenured
Рекомендуемые опции GC

Установки GC
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:+CMSIncrementalPacing
-XX:CMSIncrementalDutyCycleMin=0
-XX:+CMSIncrementalDutyCycle=10
-XX:+UseParNewGC
-XX:+CMSPermGenSweepingEnabled
Для анализа того, что происходит
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:-TraceClassUnloading
An internal look at HotSpot JVM

More Related Content

What's hot

Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
 
Алгоритмы кластеризации. ч.2
Алгоритмы кластеризации. ч.2Алгоритмы кластеризации. ч.2
Алгоритмы кластеризации. ч.2Ivan Ignatyev
 
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруДенис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруYandex
 
Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Ontico
 
"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
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про GenericsКурс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics7bits
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03Computer Science Club
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014Alex Chistyakov
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFSHappyDev
 
Алгоритмы кластеризации. ч.3
Алгоритмы кластеризации. ч.3Алгоритмы кластеризации. ч.3
Алгоритмы кластеризации. ч.3Ivan Ignatyev
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Anton Moiseenko
 

What's hot (16)

Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?
 
Алгоритмы кластеризации. ч.2
Алгоритмы кластеризации. ч.2Алгоритмы кластеризации. ч.2
Алгоритмы кластеризации. ч.2
 
Presentation_1369080393540
Presentation_1369080393540Presentation_1369080393540
Presentation_1369080393540
 
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёруДенис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
Денис Кормалев — Qt. Как выжить на минном поле. Советы сапёру
 
Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...
 
"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
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Purely practical data structures
Purely practical data structuresPurely practical data structures
Purely practical data structures
 
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про GenericsКурс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014My talk on LeoFS, HappyDev 2014
My talk on LeoFS, HappyDev 2014
 
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
2014.12.06 03 Александр Чистяков — Устройство object storage на примере LeoFS
 
Алгоритмы кластеризации. ч.3
Алгоритмы кластеризации. ч.3Алгоритмы кластеризации. ч.3
Алгоритмы кластеризации. ч.3
 
Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.Java Core. Lecture# 5. Concurrency.
Java Core. Lecture# 5. Concurrency.
 

Viewers also liked

Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSEcommerce Solution Provider SysIQ
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайнEcommerce Solution Provider SysIQ
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеEcommerce Solution Provider SysIQ
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Ecommerce Solution Provider SysIQ
 

Viewers also liked (20)

Основы Java. 2. JVM
Основы Java. 2. JVMОсновы Java. 2. JVM
Основы Java. 2. JVM
 
Seo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web ArchitectureSeo and Marketing Requirements in Web Architecture
Seo and Marketing Requirements in Web Architecture
 
Mastering Java ByteCode
Mastering Java ByteCodeMastering Java ByteCode
Mastering Java ByteCode
 
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSSГибкость и Структурированность Oбъектно Oриентированноя CSS
Гибкость и Структурированность Oбъектно Oриентированноя CSS
 
Психология восприятия и UX дизайн
Психология восприятия и UX дизайнПсихология восприятия и UX дизайн
Психология восприятия и UX дизайн
 
Правила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработкеПравила хорошего SEO тона в Frontend разработке
Правила хорошего SEO тона в Frontend разработке
 
QA evolution to the present day
QA evolution to the present dayQA evolution to the present day
QA evolution to the present day
 
Getting to know magento
Getting to know magentoGetting to know magento
Getting to know magento
 
Databases on Client Side
Databases on Client SideDatabases on Client Side
Databases on Client Side
 
Unexpected achievements 2013
Unexpected achievements 2013Unexpected achievements 2013
Unexpected achievements 2013
 
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
Модульные сетки в реальном мире - IQLab Frontend Fusion 2012
 
Going global
Going globalGoing global
Going global
 
Lupan big enterprise ecommerce fusion 2013
Lupan   big enterprise ecommerce fusion 2013Lupan   big enterprise ecommerce fusion 2013
Lupan big enterprise ecommerce fusion 2013
 
User focused design
User focused designUser focused design
User focused design
 
Testing schools overview
Testing schools overviewTesting schools overview
Testing schools overview
 
All things php
All things phpAll things php
All things php
 
IGears: Template Architecture and Principles
IGears: Template Architecture and PrinciplesIGears: Template Architecture and Principles
IGears: Template Architecture and Principles
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
 

Similar to An internal look at HotSpot JVM

CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest
 
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
 
"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
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Ontico
 
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
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...Ontico
 
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...Правильная работа с динамической памятью в высоконагруженных проектах (Максим...
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...Ontico
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгинkuchinskaya
 
Внутреннее устройство GC
Внутреннее устройство GCВнутреннее устройство GC
Внутреннее устройство GCtym32167
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage CollectorOlexandra Dmytrenko
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действииNikita Lipsky
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данныхSiel01
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NETAndrey Akinshin
 
Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва
 Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва  Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва
Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва it-people
 
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Yandex
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ OpenVZ
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptFDConf
 

Similar to An internal look at HotSpot JVM (20)

CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
 
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
 
"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
 
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
Как мы храним и анализируем большой социальный граф, Максим Бартенев (Норси-т...
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
BigMemory - работа с сотнями миллионов бизнес-объектов / Дмитрий Хмаладзе (Ag...
 
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...Правильная работа с динамической памятью в высоконагруженных проектах (Максим...
Правильная работа с динамической памятью в высоконагруженных проектах (Максим...
 
андрей паньгин
андрей паньгинандрей паньгин
андрей паньгин
 
Внутреннее устройство GC
Внутреннее устройство GCВнутреннее устройство GC
Внутреннее устройство GC
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
Память в Java. Garbage Collector
Память в Java. Garbage CollectorПамять в Java. Garbage Collector
Память в Java. Garbage Collector
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данныхОлег Царев, Кирилл Коринский   Сравнительный анализ хранилищ данных
Олег Царев, Кирилл Коринский Сравнительный анализ хранилищ данных
 
Сборка мусора в .NET
Сборка мусора в .NETСборка мусора в .NET
Сборка мусора в .NET
 
Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва
 Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва  Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва
Реактивный кэш в Android, Андрей Мельников, Rambler&Co, Москва
 
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
Как упростить жизнь системному администратору с помощью Python – Андрей Васил...
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascript
 

More from Ecommerce Solution Provider SysIQ (14)

Java serialization
Java serializationJava serialization
Java serialization
 
Developing for e commerce is important
Developing for e commerce is importantDeveloping for e commerce is important
Developing for e commerce is important
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
 
Scalability and performance for e commerce
Scalability and performance for e commerceScalability and performance for e commerce
Scalability and performance for e commerce
 
Going Global
Going GlobalGoing Global
Going Global
 
QA evolution, in pictures
QA evolution, in picturesQA evolution, in pictures
QA evolution, in pictures
 
Manifest of modern engineers
Manifest of modern engineersManifest of modern engineers
Manifest of modern engineers
 
User Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website ElementsUser Behavior: Interacting With Important Website Elements
User Behavior: Interacting With Important Website Elements
 
Management and Communications (IPAA)
Management and Communications (IPAA)Management and Communications (IPAA)
Management and Communications (IPAA)
 
Speed Up Your Website
Speed Up Your WebsiteSpeed Up Your Website
Speed Up Your Website
 
Interactive web prototyping
Interactive web prototypingInteractive web prototyping
Interactive web prototyping
 
Модульные сетки в реальном мире
Модульные сетки в реальном миреМодульные сетки в реальном мире
Модульные сетки в реальном мире
 
External Widgets Performance
External Widgets PerformanceExternal Widgets Performance
External Widgets Performance
 
Understanding Annotations in Java
Understanding Annotations in JavaUnderstanding Annotations in Java
Understanding Annotations in Java
 

An internal look at HotSpot JVM

  • 1. INSIDE THE JAVA VIRTUAL MACHINE Управление памятью и решение типичных проблем
  • 2. О чем пойдет речь •Рассмотрение с точки зрения Java программиста •Для других программистов и системных администраторов •Внутренняя организация памяти JVM
  • 3. Содержание •Базовые сведения про Garbage Collector •Исключительные ситуации OutOfMemory –Почему они произошли –Как их исправить •Некоторые опции для тюнинга VM •Вопросы и ответы •Распределение памяти внутри Java machine
  • 4. •Каждый процесс управляет памятью •Способы управления памятью в процессе o C (malloc() и free()) o C++(new и delete) o Java(new и GC) •Запускается как отдельный процесс (память между процессами не разделяется)
  • 6. Замечание Опции -Xmx, -Xms и –Xmn влияют только на размер «кучи» Java объектов, но не кучи самого Java процесса – непонимание этого факта может повлечь неправильное конфигурирование.(И как результат – ухудшение общей производительности )
  • 7. Структура памяти JVM процесса (для 32бит)
  • 8. Исключительные ситуации • java.lang.OutOfMemoryError: Java heap space • java.lang.OutOfMemoryError: PermGen space • java.lang.OutOfMemoryError: GC overhead limit exceeded • java.lang.OutOfMemoryError: unable to create new native thread
  • 9. Permanent Generation •Class data sharing (CDS) -Xshare:off -Xshare:on -Xshare:auto •String pool •Метаданные об объектах
  • 10. Переполнение PermGen •Библиотеки неявно генерирующие байткод •Использование java.lang.reflect.Proxy •Java Reflection API •Serialization •RMI •Библиотеки явно генерирующие байткод
  • 11. Java Thread Stack •Память выделяется каждому созданному потоку в индивидуальное пользование. •Хранится стек вызова методов, локальные переменные и параметры. o Локальная переменная примитивного типа - все данные полностью хранятся на стеке. o Объект - ссылка хранится на стеке, сам же объект уже создается в куче.
  • 12. Размеры объектов в памяти (примитивные типы) Java types bytes required boolean 1 byte char 2 short int 4 float long 8 double
  • 13. Размеры объектов в памяти •Обычные объекты занимают минимум 8байт (служебная информация) •Массивы занимают минимум 12 байт (8 как обычный объект и 4 - размер массива) •Для каждого объект производится выравнивание по границе 8байт
  • 14. Размеры объектов в памяти • Объект с полем типа char занимает 16 байт Заголовок 8 байт + поле 1 байт + выравнивание 7 байт • Объект с 8 полями типа char занимает 16 байт Заголовок 8 байт + 8 полей по 1 байт • Массив 10x10 int занимает 616 байт Внешний массив - 52 (после паддинга 56 байт)+ 10 внутренних массивов по 56 байт(52 байта до выравнивания)
  • 15. История Garbage Collector • Механизм GC был впервые использован Джоном Маккарти в языке LISP (1959). • В последствии часто применялся в функциональных и логических ЯП. • С 1980-х годов технология сборки мусора стала использоваться и в директивных, и в объектных языках программирования
  • 16. Немного теории Сборщики мусора используют консервативные оценки, позволяющие определить, что в будущем объект гарантированно не будет использоваться. Обычно критерием того, что объект ещё используется, является наличие ссылок на него. Если в системе нет больше ссылок на данный объект, то он больше не может быть использован программой и может быть удалён. Этот критерий используется большинством современных сборщиков мусора и называется ещё достижимостью объекта.
  • 17. Еще немного теории - Алгоритм «Mark and sweep» • для каждого объекта есть флаг, указывающий, достижим ли этот объект из программы или нет; • изначально все объекты, кроме корневых, помечаются как недостижимые; • рекурсивно просматриваются и помечаются как достижимые объекты ещё не помеченные и до которых можно добраться из корневых объектов по ссылкам; • те объекты, у которых флаг достижимости не был установлен, считаются недостижимыми.
  • 18. Ближе к практике – Фазы GC • Lock it down o Все объекты должны быть заблокированы, что бы они не изменились в процессе сборки мусора • Mark o Пройтись по всем объектам o Отметить недостижимые как «мусор» • Sweep o Удалить отмеченные объекты o Освободить память
  • 19. Стратегии GC • Stop The World • Incremental o Отложить GC до окончания создания новых объектов • Concurrent/Parallel o Выделение памяти происходит совместно с GC o Очень сложные режимы блокировок o Поколения объектов • CMS – Concurrent Mark and Sweep
  • 23. Как это работает 1. Создается новый объект 2. Если Eden переполнен – минорная сборка 3. Выжившие объекты копируются в 1st survivor space 4. Следующий раз при заполнении Eden • Копируются из Eden в 2nd • Копируются из 1st в 2nd 5. Если 2nd заполнен и объекты все еще остаются в Eden или в 1st o Копируются в tenured
  • 24. Рекомендуемые опции GC Установки GC -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:CMSIncrementalDutyCycleMin=0 -XX:+CMSIncrementalDutyCycle=10 -XX:+UseParNewGC -XX:+CMSPermGenSweepingEnabled Для анализа того, что происходит -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading