Eclipse Memory Analyzer,但始终显示发生内部错误?

时间:2012-03-22 09:57:28

标签: java eclipse memory

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid2584.hprof ...
Heap dump file created [106948719 bytes in 4.213 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at Main.main(Main.java:15)

但是当我通过Eclipse Memory Analyzer打开堆dump java_pid 2584.hprof时,总会有消息:

An internal error occurred during: 
"Parsing heap dump from **\java_pid6564.hprof'".Java heap space

11 个答案:

答案 0 :(得分:80)

问题是Eclipse Memory Analyzer没有足够的堆空间来打开堆转储文件。

您可以按如下方式解决问题:

  1. 打开MemoryAnalyzer.ini文件

  2. 将默认-Xmx1024m更改为更大尺寸

答案 1 :(得分:20)

请注意,在OS X上,要增加分配给MAT的内存,您需要右键单击Memory Analyzer.app并显示包内容。 MemoryAnalyzer.ini文件位于/ Contents / MacOS /.

答案 2 :(得分:9)

针对MAC OS X El Capitan中Eclipse中的Memory Analyzer插件的相同问题的解决方案。

我遇到了同样的问题,但是使用了eclipse插件,我在Applications Folder中没有任何Memory Analyzer应用程序。对我有用的解决方案是:

  1. 右键单击Eclipse图标,然后选择Show Package Content。
  2. 转到目录> Eclipse
  3. 打开Eclipse.ini
  4. 将值-Xmx1024m更改为-Xmx2048m
  5. 重启Eclipse

答案 3 :(得分:8)

在OS X 11.5(El Cap)上修改MemoryAnalyzer.app/Contents/MacOS/MemoryAnalyzer.ini不起作用!这是因为它在不同的地方寻找MemoryAnalyzer.ini

在我的电脑上,它正在寻找:

MemoryAnalyzer.app/Contents/Eclipse/MemoryAnalyzer.ini但真正的.ini文件是: MemoryAnalyzer.app/Contents/MacOS/MemoryAnalyzer.ini

要使更改生效,请将现有的.ini文件复制到新位置。

要查找MemoryAnalyzer查找ini文件的位置,您可以运行:

sudo su
cd ...MemoryAnalyzer.app/Contents/MacOS/
dtruss ./MemoryAnalyzer 2>&1 | grep ini

答案 4 :(得分:5)

如果从Eclipse使用Memory Analyzer,则编辑eclipse.ini文件以将vm参数增加到-Xmx1024m或更高版本。这对我有用。 http://wiki.eclipse.org/index.php/MemoryAnalyzer/FAQ#Out_of_Memory_Error_while_Running_the_Memory_Analyzer

答案 5 :(得分:1)

我在这里尝试了所有解决方案,同时仍然得到相同的错误以及eclipse因为错误或未知的文件类型/编辑器关联而试图将.hprof文件作为文本文件打开的原因。

解决方案:右键单击该文件,选择打开方式,然后选择其他,然后选择Eclipse Memory Analyzer。

使用700MB转储,并在大约600M的日食堆上使用2G转储。

答案 6 :(得分:1)

以我的经验,最大可能地添加 MemoryAnalyzer.ini ,Xms和Xmx。 G1GC更快,并且需要-XX:-UseGCOverheadLimit,因为gc使用率很高且很耗时,也许-XX:+ UseStringDeduplication是消耗更少内存的关键

-vmargs
-Xms8g
-Xmx8g
-XX:-UseGCOverheadLimit
-XX:+UseG1GC
-XX:+UseStringDeduplication

答案 7 :(得分:0)

如果您使用的是Mac,请尝试使用-data选项在mat.app'文件夹'中运行可执行文件,您可以通过该选项指定可写路径:

cd mat.app/Contents/MacOS
./MemoryAnalyzer -data <writable_path>

答案 8 :(得分:0)

正如其他人所建议的,它的两步简单过程:-

  1. 从MAT安装目录中打开MemoryAnalyzer.ini文件。

  2. 将默认值-Xmx1024m更改为较大的尺寸,例如如果必须分析4GB的堆转储,则可以将-Xmx1024m替换为-Xmx5g或-Xmx6g

有关更多详细信息,请参阅:- https://better-coding.com/solved-eclipse-mat-java-heap-space-error/

答案 9 :(得分:-2)

您可以减少应用程序内存限制,然后再次进行转储。 Eclipse Memory Analyzer将转储文件放入内存 - 我怀疑你的Eclipse内存少于应用程序限制。

您也可以执行相反的操作并增加Eclipse的内存限制,但如果您的应用程序在服务器上运行,则很难匹配内存大小。

答案 10 :(得分:-2)

发生了内部错误。 Java堆空间

Ans:转到您的项目工作区 打开.setting文件夹 删除.setting文件夹的所有文件。 你可以编译之后 现在没有像堆空间那样的错误 享受:)