实战目的
目的一、通过代码验证《Java虚拟机规范》中描述的各个运行时区域存储的内容
目的二、当发生异常时,可以根据异常的提示信息迅速得知是哪个区域的内存溢出,知道怎样的代码可能会导致这些区域内存溢出,以及出现这些异常胡该如何处理
一、Java堆溢出
package com.lkty.outofmemoryerror;
import java.util.ArrayList;
import java.util.List;
/**
* Java 堆溢出
*/
public class OutOfMemoryErrorApplication {
static class OOMObject {}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
while (true) {
list.add(new OOMObject());
}
}
}
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid22141.hprof ...
Heap dump file created [27745239 bytes in 0.472 secs]
问题解决及定位
常规的处理方法是首先通过内存映像分析工具对Dump出来的堆转储快照进行分析
- 第一步
- 首先应确认内存中导致OOM的对象是否是必要的,也就是要先分清楚到底是出现了内存泄露(Memory Leak)还是内存溢出(Memory Overflow)
网友评论