在正在运行的进程上使用该jmap -histo
命令,每 30 分钟左右,我发现一种明显是内存泄漏的对象(在桌面应用程序中)。
导致泄漏的对象(即实例数量随时间增长并且数量巨大的唯一一种对象)是int[]。
我怀疑BufferedImage
是罪魁祸首,但我不确定(我非常注意冲洗/无效BufferedImage
s 但我仍然认为这是泄漏的原因)。
但是我也在程序的另一部分使用 int[] ,我只是不确定泄漏的来源。的输出对jmap -histo
我来说有点太“薄”了。
我现在如何查明发生泄漏的int[]
位置。
顺便说一句,我想指出一个简单的方法有多棒jmap -histo
:我确信对于许多对象来说,只需查看使用的实例数量和内存就足以发现泄漏,而无需进一步分析。
但是在我的情况下,我需要别的东西。
我的问题不是什么样的工具可以发现泄漏。我的问题是:
知道我的应用程序(或我的应用程序正在使用的 API)正在泄漏int[],我可以采取哪些步骤(例如,使用您最喜欢的分析器)以希望找到泄漏?
该工具必须在 Java 1.5 OS X 10.4 Apple JVM 上运行。