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虚拟机配置
参数:
- -Xms20m -Xmx20m ##设置堆大小20m,并将最小和最大值设置相等,避免扩展
- -XX:+HeapDumpOnOutOfMemoryError ##当前的内存堆转储快照,默认在项目的工作空间
运行结果
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid73264.hprof ...
Heap dump file created [27891169 bytes in 0.102 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2245)
at java.util.Arrays.copyOf(Arrays.java:2219)
at java.util.ArrayList.grow(ArrayList.java:242)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)
at java.util.ArrayList.add(ArrayList.java:440)
at com.fei.zhou.day1.Test1.main(Test1.java:11)
3使用Memory Analysis
1打开Memory Analysis
2打开dump文件
4分析
上图中,可以看到demo创建很多
参数
- Shallow Heap浅堆:java对象占用的内存
- Retained Heap深堆:java对象及对象引用的类占用的内存 ,jvm gc回收时释放的内存
- Retained Heap深堆大于等于Shallow Heap浅堆