【发布时间】:2013-01-21 22:41:08
【问题描述】:
我正在尝试分析我的 Java 小程序的堆转储,即使我增加了堆大小,如本文所示。 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) 显示我的摇摆应用程序正在文件夹中图像的缩略图(每个图像大约 100kb)并将它们显示为 JToggleButton。但是一旦添加了缩略图,JtoggleButton 的大小为 6MB。因此,如果文件夹中有 100 张图像,则图像的缩略图至少为 600MB。除此之外,我还需要用这个程序做其他事情。在这种情况下,MAT 帮助确定了占用最多堆空间的确切对象。
谢谢 DJ。
【问题讨论】:
-
什么是“数字转储”?这与例如 JMap 产生的不同吗?
-
更新后,这里还有实际问题吗?
-
是的,先生.. 我仍在尝试查看如何减小缩略图的大小(6mb)。我的实际图像小于 100kb。我正在使用 toglBtn=new JToggleButton(""+i,new ImageIcon(ImageIO.read(new File(listOfFiles[i].getAbsolutePath())).getScaledInstance(139, 163, BufferedImage.SCALE_SMOOTH)));创建缩略图并使它们成为可以单独选择的 jtogglebuttons ..这些按钮中的每一个现在都是 6 mb。
-
您应该编辑此问题以便人们知道您在问什么,或者关闭它并提出一个新问题。
标签: java out-of-memory heap-memory heap-dump