当前位置: 代码迷 >> java >> 如何在堆外的Java应用程序中检测内存泄漏?
  详细解决方案

如何在堆外的Java应用程序中检测内存泄漏?

热度:85   发布时间:2023-08-04 09:16:35.0

我们有一个Java应用程序,它在Windows 7环境中通过JNA使用SWT和其他一些DLL。

我们已经看到JVM进程的内存使用量随着时间的推移而增加,但JVM堆在相对稳定的情况下具有正常的GC活动。

我们怀疑SWT和/或JNA / DLL存在一些内存泄漏,但无法确定原因或位置。

Windows平台上是否有任何工具可以帮助检测此类问题? 或Java平台中的任何设施可以帮助解决此问题? 任何建议都是受欢迎的。

在Java 8中有一个命令行开关: -XX:NativeMemoryTracking=<value> ,其中value可以是offsummarydetail

您可以将其设置为detail ,然后您可以使用jcmd进行查询。

有一些这方面的官方文档 。 此功能相当有限,但它可能只是帮助找到原因。


如果做不到这一点,找出问题根源的原始但有效的方法是用虚拟版本(甚至是非本地虚拟版本)替换dll,看看是否可以重现同样的问题。

  相关解决方案