扫描程序OutOfMemoryError&使用Memory分析器进行Java堆转储分析(MAT

时间:2013-02-06 16:31:18

标签: java out-of-memory heap heap-dump

我正在尝试分析我的Java applet的堆转储,即使我增加堆大小,也会耗尽堆空间,如本文所示。 Applet: Java heap space

现在我今天上午采取了一些堆转储(是的..可能采取数字转储),我试图用MAT和Visual VM 1.3.5分析它们。在运行泄漏测试之后,关键嫌疑人是org.eclipse.jdt.internal.core.JavaModelManager和org.eclipse.jst.jee.archive.internal.ArchiveImpl ..我在我的代码中使用了这些中的任何一个。

Visual Vm显示Byte [],Int [],Char [],java.lang.string和short []类占用的空间最大。我在我的程序中没有使用太多这些。我该如何理解这个转储以及接下来的步骤应该是什么?如果需要,我可以发布转储的副本。

更新:在我的情况下,MAT比视觉VM更好。从早上开始,我一直在使用转储(再次进行数字转储)并使用这两种工具进行分析。虽然VVM显示org.eclipse.jdt.internal.core.JavaModelManager和org.eclipse.jst.jee.archive.internal.ArchiveImpl作为其泄密嫌疑人报告中的嫌疑人,但Eclipse内存分析器(MAT)显示我的swing应用程序正在制作文件夹中图像的缩略图(每个图像大约100kb)并将它们显示为JToggleButton。但是一旦添加缩略图,JtoggleButton大小就是6MB ..因此,如果文件夹中有100个图像,则图像的缩略图至少为600MB。除此之外,我需要用这个程序做其他事情。在这种情况下,MAT帮助识别占用大多数堆空间的确切对象。

由于 DJ。

1 个答案:

答案 0 :(得分:1)

1)我在运行程序的不同点使用Jconsole创建了堆转储, 2)将它们导入Memory Analyzer 3)泄漏泄漏嫌疑人报告 4)观察最大实例的大小和它们的数量。 这显示了我的问题,我试图解决它,我不知道如何..然而。 Atleast很高兴我发现了MAT,它在我的案例中肯定比Visual VM更有帮助。希望它可以帮助别人。下面是我下一个问题的链接。

swing applet.. jtogglebutton size is 6mb. how can i reduce the size