Как вы диагностируете утечку памяти C, вызванную Java-программой? - PullRequest
6 голосов
/ 20 сентября 2008

Я работаю над большим приложением (300K LOC), которое вызывает утечку памяти в JVM Sun 1.6 (1.6_05). Профилирование Java не показывает утечки. Есть ли в JVM какая-либо диагностика, которая может обнаружить причину утечки?
Мне не удалось создать простой изолированный Java-тест. Это единственный способ выяснить это с помощью анализатора кучи C на JVM?
Приложение создает пул сокетов и выполняет значительное количество операций сетевого ввода-вывода.

Ответы [ 2 ]

2 голосов
/ 20 сентября 2008

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

После этого есть 2 возможных решения:

  1. Вы можете с помощью кривой в реальном времени изолировать проблему и создать более простой тест, пока не найдете причину проблемы.
  2. Вы ищете в своем коде типичные проблемы, такие как:
    1. Экземпляры класса Thread, которые никогда не запускаются.
    2. Изображения или графика, которые никогда не утилизируются
    3. ODBC Bridge Объекты, которые никогда не закрываются
0 голосов
/ 20 сентября 2008

Мне нравится valgrind (http://valgrind.org/), если вы выполняете его в системе, которую он поддерживает. Это действительно круто!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...