【问题标题】:How to find native memory leaks caused by a java code?如何查找由 java 代码引起的本机内存泄漏?
【发布时间】:2011-10-08 22:55:15
【问题描述】:

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

谢谢!!

【问题讨论】:

  • 要分析 C/C++,您需要一个用于 C/C++ 的分析器。即它不是 Java 或 Netbeans 中的内存泄漏。

标签: java netbeans memory-leaks


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    java 有免费的工具,称为本地内存跟踪器。您可以将其作为基准,然后定期生成差异。

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

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 2011-07-02
      • 2010-09-09
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多