如何查找java代码导致的本机内存泄漏?

时间:2011-07-19 22:34:26

标签: java netbeans memory-leaks

我有一个java代码,它基本上创建,显示然后销毁几何对象,如球体,进行一定次数的迭代。我使用本机opengl调用来显示这些对象。随着本机内存不断增加,代码中存在一些内存泄漏。我通过查看任务管理器中的“Workink Set”内存来检查本机内存。但是,当我运行netbeans分析器时,我找不到任何内存泄漏。那么,如何找到本机内存泄漏?是否有可用的工具可视化本机和堆内存使用?

谢谢!

2 个答案:

答案 0 :(得分:2)

JConsole可以帮助查看Java内存使用情况。

如果您使用的是现有的Java-OpenGL库,则可能使用可能未被释放的直接缓冲区。如果您自己编写了本机代码,这可能不适用。

对于本机内存,如果您的Java-OpenGL库使用直接缓冲区,我只注意到在JDK 7中(我正在运行预发行版),JConsole中有一些额外的MBean,这些MBean在以前的版本中不存在这可能有所帮助。查看java.nio.BufferPool下JConsole中的MBeans选项卡。在'direct'bean下你可以看到直接缓冲区占用的内存。如果这种情况持续上升,则可能表明直接内存泄漏(可能是因为未在Java代码中关闭/处置OpenGL资源)。

答案 1 :(得分:0)

java有一个称为本机内存跟踪器的免费工具。您可以对其进行基线,然后定期生成差异。

使用这种差异,您可以轻松识别内存的哪个部分正在泄漏内存。