предполагает, что мне нужно позволить программе работать до тех пор, пока она не выйдет из строя (возникает ошибка нехватки памяти), что сгенерирует отчет о сбое.
Я не думаю, что это правда - вы не получите файл дампа, когда OutOfMemoryError
произойдет (я бы поспорил, что автор путает эту проблему с какой-то ошибкой JVM, которая может привести к тому, что дамп ядра будет Сохраненный).
Лучшая процедура - создать дамп кучи, используя jmap ; это выведет содержимое кучи в двоичный файл (обычно известный как файл hprof). Этот файл может быть проанализирован любым количеством анализаторов:
- jhat - Инструмент Sun, который анализирует файл hprof, запускает встроенный веб-сервер, чтобы вы могли анализировать кучу через веб-браузер / просматривать отчеты. Я обнаружил, что это очень медленно для больших куч.
- VisualVM - Удивительный инструмент отладки / устранения неполадок в комплекте с JDK. Среди прочего, это также может быть использовано для создания дамп кучи любого работающего процесса, а также дамп потока. Я обнаружил, что загружать большие файлы hprof очень медленно.
- Eclipse Memory Analyzer - Плагин Eclipse, который может генерировать файлы hprof.
Я бы настоятельно рекомендовал использовать плагин Eclipse, поскольку он очень быстро загружает большие (> 500 МБ) дампы кучи (менее чем за минуту), создает полезные отчеты, поддерживает язык запросов со сложной логикой и т. Д.