学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题

Posted ZzUuOo666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题相关的知识,希望对你有一定的参考价值。

写了一个死循环不断的创建对象,模拟内存溢出

 1 package com.zuo.test1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Main {
 7     
 8     public static void main(String[] args) {
 9         List<Demo> demos=new ArrayList<>();
10         while(true){
11             demos.add(new Demo());
12         }
13     }
14 
15     
16 }

 

修改启动参数。 

Apply

 

运行。

出现堆溢出错误,这时就会在本项目下出现xxx.hprof

 

然后再使用MAT工具引入此文件。进行分析。

通过MAT发现heap dump问题所在,就需要寻找导致内存泄漏的代码点。这时往往需要打开对象依赖关系树形视图,点击如图按钮即可。 

 

 

 

为了更有效率的使用 MAT,我们可以配置一些环境参数。因为通常而言,分析一个堆转储文件需要消耗很多的堆空间,为了保证分析的效率和性能,在有条件的情况下,我们会建议分配给 MAT 尽可能多的内存资源。你可以采用如下两种方式来分配内存更多的内存资源给 MAT。

一种是修改启动参数 MemoryAnalyzer.exe-vmargs -Xmx4g

另一种是编辑文件 MemoryAnalyzer.ini,在里面添加类似信息 -vmargs– Xmx4g。

说明:

1. MemoryAnalyzer.ini中的参数一般默认为-vmargs– Xmx1024m,这就够用了。假如你机器的内存不大,改大该参数的值,会导致MemoryAnalyzer启动时,报错:Failed to create the Java Virtual Machine。

2.当你导出的dump文件的大小大于你配置的1024m(说明1中,提到的配置:-vmargs– Xmx1024m),MAT输出分析报告的时候,会报错:An internal error occurred during: "Parsing heap dump from XXX”。适当调大说明1中的参数即可。

 

以上是关于学习jvm,关于MAT an internal error occurred during:"Parsing heap dump" from问题的主要内容,如果未能解决你的问题,请参考以下文章

关于eclipse的"An internal error occurred during"的错误

关于javac is not recognized as an internal or external command, operable program or batch file的解决方案

String的内存和intern()方法

关于JVM的一些东西

iOS之There was an internal API error错误

String类中intern方法的原理分析