转:https://blog.csdn.net/zhou920786312/article/details/84195752

 

内存溢出问题分析——Eclipse Memory Analysis的安装和使用

1安装

在Eclipse help -> Eclipse Marketplace下搜索Memory.找到图中的软件,默认安装就可以。

 

 

2测试:

1测试代码

public class Test1 {
  public static void main(String[] args) {
    List<Demo> list = new ArrayList<>();
    while (true) {
      list.add(new Demo());
    }
  }
}

public class Demo {

}

1虚拟机配置

在main方法上,右击鼠标 --> run as--> run configurations..  ,打开run configurations窗口

 

 

在run configurations窗口后,设置参数:-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m

  • -Xms20m -Xmx20m ##设置堆大小20m,并将最小和最大值设置相等,避免扩展
  • -XX:+HeapDumpOnOutOfMemoryError ##当前的内存堆转储快照,默认在项目的工作空间

 

 打开windows任务管理器窗口,查看内存

运行结果

 

 

 

 

3使用Memory Analysis

1打开Memory Analysis

 

 

 

 

2打开dump文件 

 

 

 

 

 

 

4分析

 

 

 

 

 

 

 

 

上图中,可以看到demo创建很多

参数

  • Shallow Heap浅堆:java对象占用的内存
  • Retained Heap深堆:java对象及对象引用的类占用的内存 ,jvm gc回收时释放的内存
  • Retained Heap深堆大于等于Shallow Heap浅堆