JVM — то, что отличает Java-разработчика уровня middle+ от того, кто просто пишет код на Java. Здесь отвечают на вопросы «почему сервис съел всю память», «откуда паузы в 2 секунды», «почему в контейнере OOMKilled».
JVM и сборка мусора
Память JVM, устройство объекта, сборщики мусора, загрузка классов и JIT.
Темы этапа
- Память JVM Основа
Куча, стек, метаспейс, устройство объекта, память Java в контейнере.
- Сборка мусора Основа
Поколения, алгоритмы и сборщики (G1, ZGC), паузы и тюнинг.
- Загрузка классов и JIT Основа
Class loaders, интерпретация и JIT-компиляция, бенчмаркинг на JMH.
Вопросы с собеседований
Смотреть всеИз каких основных областей состоит память JVM и что где хранится?Junior
Куча (heap) — все объекты и массивы, общая для потоков, её чистит GC. Стек — у каждого потока свой: кадры вызовов с локальными переменными и ссылками. Metaspace — метаданные классов, в нативной памяти вне кучи.
Полный разборЧто такое class loader и как работает делегирование загрузки классов?Middle
ClassLoader находит байт-код и превращает его в класс. Иерархия: Bootstrap (ядро JDK) → Platform (модули платформы) → Application (classpath). Модель parent-first: запрос сначала идёт к родителю, и только если тот не нашёл — загрузчик ищет сам.
Полный разборКак выбрать сборщик мусора: Parallel, G1 или ZGC?Senior
Ось выбора — пропускная способность против задержки. Parallel — максимум throughput, паузы растут с кучей: батчи. G1 (по умолчанию с JDK 9) — баланс с целевой паузой MaxGCPauseMillis. ZGC (или Shenandoah) — паузы под миллисекунду почти независимо от размера…
Полный разборЧем отличаются JDK, JRE и JVM?Junior
Вложенность: JVM исполняет байткод, JRE = JVM + стандартные библиотеки для запуска, JDK = JRE + инструменты разработки.
Полный разборКаков компромисс трёх базовых алгоритмов GC: mark-sweep, mark-compact, copying?Middle
Mark-sweep — пометить живых, освободить остальное: быстро, но фрагментация. Mark-compact — плюс уплотнение живых: нет фрагментации, но перемещение дорого. Copying — копировать живых в пустую область: быстро и без фрагментации, но нужна половина места в…
Полный разборЧто такое stop-the-world и safepoint в работе GC?Senior
Stop-the-world — пауза, когда все потоки приложения стоят. Останавливаются они в safepoint — точках кода, где JVM точно знает, какие ячейки стека и регистры содержат ссылки, и может безопасно двигать объекты и исправлять ссылки.
Полный разборРазборы темы
- Загрузка классов и class loaders
Жизненный цикл класса (loading/linking/initialization), иерархия загрузчиков с делегированием, триггеры инициализации и изоляция.
- GC: алгоритмы и сборщики
Mark-sweep-compact и копирование, stop-the-world и safepoints, конкурентная маркировка, G1 и ZGC и выбор по throughput/latency.
- GC: поколения и продвижение объектов
Гипотеза о поколениях, Eden и Survivor, minor GC через копирование, tenuring и преждевременное продвижение.
- GC: корни, достижимость и типы ссылок
GC roots и reachability, strong/soft/weak/phantom-ссылки, Cleaner вместо finalize и утечки через сильные ссылки.
- GC: тюнинг и мониторинг
Ключевые флаги, unified GC-логи, метрики (паузы, throughput, allocation/promotion rate) и диагностика частых проблем.
- Java Memory Model: happens-before и volatile
Зачем нужна модель памяти, видимость и переупорядочивание, отношение happens-before, семантика volatile и final, гонки данных.
- Память JVM и устройство объекта
Runtime data areas, стек против кучи, заголовок объекта и выравнивание, compressed oops и metaspace.
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.