Найти в Дзене
Записки о Java

HotSpot JVM

Стек: Java 11, HotSpot JVM
Цель: раз и навсегда понять, что такое HotSpot, как он устроен, какие GC он использует по умолчанию, и почему это важно для разработчика. Один из самых частых вопросов: «HotSpot — это сборщик мусора?» Нет!
HotSpot — это реализация Java Virtual Machine (JVM), разработанная компанией Sun Microsystems (ныне Oracle). 💡 HotSpot = JVM,
а Serial, Parallel, G1, ZGC — это Garbage Collectors, которые работают внутри HotSpot. HotSpot — это высокопроизводительная виртуальная машина, которая: 📌 Имя “HotSpot” происходит от технологии adaptive optimization:
JVM отслеживает “горячие” участки кода (часто выполняемые) и компилирует их в нативный код для ускорения. +-----------------------------+ | Java Application | +-----------------------------+ | Java Class Library | +-----------------------------+ | Bytecode | +-----------------------------+ | HotSpot JVM | | +-----------------------+ | | | JIT Compiler
Оглавление

Стек: Java 11, HotSpot JVM
Цель: раз и навсегда понять, что такое HotSpot, как он устроен, какие GC он использует по умолчанию, и почему это важно для разработчика.

🔍 HotSpot — это не Garbage Collector!

Один из самых частых вопросов:

«HotSpot — это сборщик мусора?»

Нет!
HotSpot — это реализация Java Virtual Machine (JVM), разработанная компанией Sun Microsystems (ныне Oracle).

💡 HotSpot = JVM,
а
Serial, Parallel, G1, ZGC — это Garbage Collectors, которые работают внутри HotSpot.

Что такое HotSpot JVM?

HotSpot — это высокопроизводительная виртуальная машина, которая:

  • Запускает байт-код Java,
  • Выполняет динамическую компиляцию (JIT),
  • Управляет памятью (включая GC),
  • Обеспечивает безопасность и многопоточность.
📌 Имя “HotSpot” происходит от технологии adaptive optimization:
JVM
отслеживает “горячие” участки кода (часто выполняемые) и компилирует их в нативный код для ускорения.

🏗️ Архитектура HotSpot (упрощённо)

+-----------------------------+

| Java Application |

+-----------------------------+

| Java Class Library |

+-----------------------------+

| Bytecode |

+-----------------------------+

| HotSpot JVM |

| +-----------------------+ |

| | JIT Compiler | | ← C1 (Client), C2 (Server)

| +-----------------------+ |

| +-----------------------+ |

| | Garbage Collector | | ← Serial, Parallel, G1...

| +-----------------------+ |

| +-----------------------+ |

| | Runtime Data Areas | | ← Heap, Metaspace, Stack...

| +-----------------------+ |

+-----------------------------+

| Operating System |

+-----------------------------+

Adaptive Optimization: как HotSpot ускоряет код

HotSpot использует два JIT-компилятора:

Компилятор

Назначение

Характеристики

C1 (Client Compiler)

Быстрая компиляция

Меньше оптимизаций, быстрый запуск

C2 (Server Compiler)

Максимальная производительность

Глубокие оптимизации, дольше компилирует

Как это работает:

  1. Код сначала интерпретируется.
  2. JVM считает, сколько раз вызван метод.
  3. Если метод «горячий» — его компилирует C1.
  4. Если очень горячий — перекомпилирует C2 с агрессивными оптимизациями.
📌 Результат: часто вызываемый код работает почти как нативный C++.

🧹 Управление памятью в HotSpot (Java 11)

Структура памяти:

  • Heap — для объектов (делится на регионы в G1, поколения в других GC).
  • Metaspace — для метаданных классов (заменяет PermGen из Java 7).
  • Stack — для локальных переменных и вызовов методов (на поток).
  • PC Register — указатель на текущую инструкцию.
  • Native Method Stack — для нативных методов (JNI).

Особенности Metaspace:

  • Растёт динамически (в отличие от фиксированного PermGen),
  • Очищается при выгрузке классов,
  • Ограничивается через -XX:MaxMetaspaceSize.

Пример запуска:

java -Xms4g -Xmx4g \

-XX:+UseG1GC \

-Xlog:gc*:file=app-gc.log:time \

-jar myapp.jar

Распространённые заблуждения

Миф

Реальность

«HotSpot — это GC»

HotSpot — это JVM, GC — её часть

«JIT компилирует весь код сразу»

Только “горячие” методы

«Metaspace не может переполниться»

Может, если много динамических классов (Spring, Hibernate)

«G1 всегда лучше Parallel»

Для batch-обработки Parallel даёт больший throughput

Заключение

HotSpot — это не просто “JVM из Oracle”.
Это
сложная, адаптивная система, которая:

  • Анализирует ваш код во время выполнения,
  • Оптимизирует “горячие” участки,
  • Автоматически выбирает GC под ваше железо,
  • Управляет памятью так, чтобы вам не приходилось думать о ней.
🔑 Как Java-разработчику, вам нужно знать:Какой GC используется по умолчанию (G1 в Java 11 на серверах),
Как читать GC-логи,
Как задавать -Xmx,
Что “горячий код” — это реальность, а не миф.

HotSpot делает свою работу тихо и эффективно — но понимание его принципов превращает вас из пользователя в мастера.

🔗 Полезные ссылки