JVM middle
Как воспроизвести OOM?
Ответ
static Map без eviction: статический Map, добавляешь объекты в цикле → heap exhaustion. Бесконечное создание Thread: каждый поток = ~1MB стека → native OOM. Metaspace: динамическая генерация классов (CGLIB, ASM) переполняет область метаданных. А бесконечная рекурсия даёт StackOverflowError, а не OutOfMemoryError.
Разбор: OOM воспроизводят накоплением объектов без очистки (static-коллекция растёт в цикле → heap exhaustion), бесконтрольным созданием потоков (нативная память под стеки) или генерацией классов (Metaspace). Ловушка: бесконечная рекурсия даёт StackOverflowError, а не OutOfMemoryError; фреймы лежат в стеке потока, а не в heap; вызовы System.gc() и утечка connection'ов сами по себе heap не исчерпывают.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.