0

在正在运行的进程上使用该jmap -histo命令,每 30 分钟左右,我发现一种明显是内存泄漏的对象(在桌面应用程序中)。

导致泄漏的对象(实例数量随时间增长并且数量巨大的唯一一种对象)是int[]

我怀疑BufferedImage是罪魁祸首,但我不确定(我非常注意冲洗/无效BufferedImages 但我仍然认为这是泄漏的原因)。

但是我也在程序的另一部分使用 int[] ,我只是不确定泄漏的来源。的输出对jmap -histo我来说有点太“薄”了。

我现在如何查明发生泄漏的int[]位置。

顺便说一句,我想指出一个简单的方法有多棒jmap -histo:我确信对于许多对象来说,只需查看使用的实例数量和内存就足以发现泄漏,而无需进一步分析。

但是在我的情况下,我需要别的东西。

我的问题不是什么样的工具可以发现泄漏。我的问题是:

知道我的应用程序(或我的应用程序正在使用的 API)正在泄漏int[],我可以采取哪些步骤(例如,使用您最喜欢的分析器)以希望找到泄漏?

该工具必须在 Java 1.5 OS X 10.4 Apple JVM 上运行。

4

2 回答 2

1

您需要按 Retained Heap 对对象进行排序。您会很快找到包含所有 int[] 的有意义的对象/类。

于 2011-01-07T21:07:59.147 回答
1

我建议首先使用 Eclipse MAT,因为我个人不知道 jProfiler 的功能。然后,当您加载堆转储时,您可以检查一些 int[] 的传入引用。您可以细化创建阵列的人,并查看哪个控股类别真正创造了大量数量。

于 2011-01-07T21:16:34.813 回答