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

У меня есть Java-код, который в основном создает, отображает, а затем уничтожает геометрические объекты, такие как сферы, на определенное количество итераций.Я использую родные вызовы opengl для отображения этих объектов.В коде есть некоторая утечка памяти, поскольку собственная память продолжает увеличиваться.Я проверяю собственную память, просматривая память "Workink Set" в диспетчере задач.Однако, когда я запустил профилировщик netbeans, я не смог обнаружить утечку памяти.Итак, как найти утечку памяти?Существуют ли какие-либо инструменты, позволяющие визуализировать использование как собственной, так и динамической памяти?

Спасибо !!

Ответы [ 2 ]

2 голосов
/ 20 июля 2011

JConsole может помочь в просмотре использования памяти Java.

Если вы используете существующую библиотеку Java-OpenGL, возможно, она использует прямые буферы, которые могут не освобождаться. Если вы сами написали нативный код, это, вероятно, не подойдет.

Что касается встроенной памяти, если ваша библиотека Java-OpenGL использует прямые буферы, я заметил только в JDK 7 (я запускаю предварительную версию), что в JConsole есть некоторые дополнительные MBean-компоненты, которых нет в предыдущих версиях это может помочь. Взгляните на вкладку MBeans в JConsole под java.nio.BufferPool. Под «прямым» компонентом вы можете видеть память, занятую прямыми буферами. Если это будет продолжаться, это может указывать на прямую утечку памяти (возможно, из-за того, что вы не закрыли / не удалили ресурсы OpenGL в вашем коде Java).

0 голосов
/ 27 февраля 2018

Java имеет бесплатный инструмент, известный как трекер памяти. Вы можете исходить из этого, а затем генерировать разницу через равные промежутки времени.

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

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