Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

An internal look at HotSpot JVM

879 views

Published on

There are hundreds of JVM parameters and options out there. Here we are going to take a closer look at the internal structure of HotSpot VM while over-viewing memory spaces and different types of Garbage Collectors.

  • Be the first to comment

  • Be the first to like this

An internal look at HotSpot JVM

  1. 1. INSIDE THE JAVAVIRTUAL MACHINEУправление памятью и решениетипичных проблем
  2. 2. О чем пойдет речь•Рассмотрение с точки зрения Java программиста•Для других программистов и системныхадминистраторов•Внутренняя организация памяти JVM
  3. 3. Содержание•Базовые сведения про Garbage Collector•Исключительные ситуации OutOfMemory–Почему они произошли–Как их исправить•Некоторые опции для тюнинга VM•Вопросы и ответы•Распределение памяти внутри Java machine
  4. 4. •Каждый процесс управляет памятью•Способы управления памятью в процессе o C (malloc() и free()) o C++(new и delete) o Java(new и GC)•Запускается как отдельный процесс (память между процессами не разделяется)
  5. 5. The JVM Process Heap
  6. 6. ЗамечаниеОпции -Xmx, -Xms и –Xmn влияют только на размер «кучи» Java объектов, но не кучисамого Java процесса – непонимание этого факта может повлечь неправильноеконфигурирование.(И как результат – ухудшение общей производительности )
  7. 7. Структура памяти JVM процесса(для 32бит)
  8. 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. 9. Permanent Generation•Class data sharing (CDS) -Xshare:off-Xshare:on-Xshare:auto•String pool•Метаданные об объектах
  10. 10. Переполнение PermGen•Библиотеки неявно генерирующие байткод•Использование java.lang.reflect.Proxy•Java Reflection API•Serialization•RMI•Библиотеки явно генерирующие байткод
  11. 11. Java Thread Stack•Память выделяется каждому созданному потоку виндивидуальное пользование.•Хранится стек вызова методов, локальныепеременные и параметры. o Локальная переменная примитивного типа - все данные полностью хранятся на стеке. o Объект - ссылка хранится на стеке, сам же объект уже создается в куче.
  12. 12. Размеры объектов в памяти(примитивные типы) Java types bytes requiredboolean 1bytechar 2shortint 4floatlong 8double
  13. 13. Размеры объектов в памяти•Обычные объекты занимают минимум 8байт(служебная информация)•Массивы занимают минимум 12 байт (8 какобычный объект и 4 - размер массива)•Для каждого объект производится выравниваниепо границе 8байт
  14. 14. Размеры объектов в памяти• Объект с полем типа char занимает 16 байтЗаголовок 8 байт + поле 1 байт + выравнивание 7 байт• Объект с 8 полями типа char занимает 16 байтЗаголовок 8 байт + 8 полей по 1 байт• Массив 10x10 int занимает 616 байтВнешний массив - 52 (после паддинга 56 байт)+10 внутренних массивов по 56 байт(52 байта до выравнивания)
  15. 15. История Garbage Collector• Механизм GC был впервые использован Джоном Маккарти в языке LISP (1959).• В последствии часто применялся в функциональных и логических ЯП.• С 1980-х годов технология сборки мусора стала использоваться и в директивных, и в объектных языках программирования
  16. 16. Немного теории Сборщики мусора используют консервативныеоценки, позволяющие определить, что в будущемобъект гарантированно не будет использоваться. Обычно критерием того, что объект ещёиспользуется, является наличие ссылок на него.Если в системе нет больше ссылок на данныйобъект, то он больше не может быть использованпрограммой и может быть удалён. Этот критерийиспользуется большинством современныхсборщиков мусора и называется ещёдостижимостью объекта.
  17. 17. Еще немного теории - Алгоритм«Mark and sweep»• для каждого объекта есть флаг, указывающий, достижим ли этот объект из программы или нет;• изначально все объекты, кроме корневых, помечаются как недостижимые;• рекурсивно просматриваются и помечаются как достижимые объекты ещё не помеченные и до которых можно добраться из корневых объектов по ссылкам;• те объекты, у которых флаг достижимости не был установлен, считаются недостижимыми.
  18. 18. Ближе к практике – Фазы GC• Lock it down o Все объекты должны быть заблокированы, что бы они не изменились в процессе сборки мусора• Mark o Пройтись по всем объектам o Отметить недостижимые как «мусор»• Sweep o Удалить отмеченные объекты o Освободить память
  19. 19. Стратегии GC• Stop The World• Incremental o Отложить GC до окончания создания новых объектов• Concurrent/Parallel o Выделение памяти происходит совместно с GC o Очень сложные режимы блокировок o Поколения объектов• CMS – Concurrent Mark and Sweep
  20. 20. Стратегии GC
  21. 21. Стратегии GC
  22. 22. Поколения объектов в HotSpot
  23. 23. Как это работает1. Создается новый объект2. Если Eden переполнен – минорная сборка3. Выжившие объекты копируются в 1st survivor space4. Следующий раз при заполнении Eden• Копируются из Eden в 2nd• Копируются из 1st в 2nd5. Если 2nd заполнен и объекты все еще остаются в Eden или в 1st o Копируются в tenured
  24. 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

×