Как я могу увидеть, что находится в моей куче на Java?

StackOverflow https://stackoverflow.com/questions/145922

  •  02-07-2019
  •  | 
  •  

Вопрос

Мне удалось обнаружить «утечку» памяти в Java-приложении, которое я разрабатываю.При запуске моего набора тестов JUnit я случайно получаю исключения из памяти (java.lang.OutOfMemoryError).

Какие инструменты я могу использовать для проверки кучи моего Java-приложения, чтобы увидеть, что использует всю мою кучу, чтобы я мог определить, что хранит ссылки на объекты, которые должны иметь возможность собирать мусор.

Это было полезно?

Решение

VisualVM включен в самые последние выпуски Java.Вы можете использовать это для создания дампа кучи и просмотра объектов в нем.

Альтернативно вы также можете создать команду дампа памяти с помощью jmap (в каталоге jdk/bin):

jmap -dump:format=b,file=heap.bin <pid>

Вы даже можете использовать это, чтобы получить быструю гистограмму всех объектов.

jmap -histo <pid>

Я могу порекомендовать Eclipse Memory Analyzer (http://eclipse.org/mat) для расширенного анализа дампов кучи.Это позволяет вам точно узнать, почему определенный объект или набор объектов жив.Вот запись в блоге, показывающая, на что способен Memory Analyzer: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-anasis-finding-memory-leaks-with-one-click/

Другие советы

Если вам нужно что-то бесплатное, попробуйте ВисуалВМ

Из описания проекта:

VisualVM — это визуальный инструмент, объединяющий инструменты JDK командной строки и упрощенные возможности профилирования.Предназначен как для разработки, так и для использования во время производства.

Это довольно старый вопрос.Многие люди, возможно, начали использовать IntelliJ, поскольку на него был первоначально дан ответ.У IntelliJ есть плагин, который может показывать использование памяти, называемый Просмотр памяти отладчика JVM.

Используйте профилировщик, например JПрофилер или ВашКитПрофилер

JProfiler работал у меня очень хорошо....

http://www.ej-technologies.com/products/jprofiler/overview.html

Использовать Анализатор памяти Eclipse

Насколько мне известно, не существует другого инструмента, который был бы близок к нему по функциональности, производительности и цене (бесплатный и с открытым исходным кодом) при анализе дампов кучи.

Если вы используете систему, поддерживающую GTK, вы можете попробовать использовать СПМ.

Вы можете попробовать Детектор утечки памяти, который является частью набора инструментов JRockit Mission Control.Это позволяет вам проверять кучу во время работы JVM.Вам не нужно постоянно делать снимки.Вы можете просто подключиться к JVM онлайн и посмотреть, как меняется куча между сборками мусора.Вы также можете проверять объекты, графически отслеживать ссылки и получать трассировки стека, из которых ваше приложение в данный момент выделяет объекты.Вот краткое описание введение.

Инструмент можно использовать бесплатно для разработки, и вы можете скачать его. здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top