我有一个java代码,基本上创建,显示,然后破坏几何对象,如球体的迭代数。我使用原生opengl调用来显示这些对象。由于本机内存不断增加,代码中存在一些内存泄漏。我通过查看任务管理器中的"Workink Set"内存来检查本机内存。然而,当我运行netbeans分析器时,我找不到任何内存泄漏。那么,如何找到本机内存泄漏呢?是否有工具可以可视化本机和堆内存的使用情况?
谢谢! !
JConsole可以帮助查看Java内存使用情况。
如果你正在使用现有的Java-OpenGL库,它可能正在使用可能不会被释放的直接缓冲区。如果你自己编写本机代码,这可能不适用。
对于本机内存,如果您的Java-OpenGL库使用直接缓冲区,我注意到仅在JDK 7中(我正在运行预发行版),在JConsole中有一些额外的mbean可见,这些mbean在以前的版本中可能会有所帮助。查看JConsole中java.nio.BufferPool下的MBeans选项卡。在"直接"bean下,您可以看到直接缓冲区所使用的内存。如果这个值持续上升,这可能表明直接内存泄漏(可能是因为没有关闭/处置Java代码中的OpenGL资源)。
java有一个叫做本机内存跟踪器的免费工具。你可以把它作为基准,然后每隔一段时间产生一个差异。
使用此差异,您可以轻松地识别内存的哪一部分正在泄漏内存。