小白学JVM调优一: 三种场景模拟OOM获得dump文件

小白学JVM调优一: 三种场景模拟OOM获得dump文件

三种场景模拟OOM获得dump文件

实操一. mac 用idea启动main方法导致堆内存溢出,使用Eclipse Memory Analyzer分析:
// VM option: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
// while循环往list对象中放对象
public class HeapOOM {

static class OOMObject{

}

public static void main(String[] args) {

    List oomList = new ArrayList();

    while(true) {
        oomList.add(new OOMObject());
    }
}

}

使用从Eclipse官网下载的Memory Analyzer打开dump在根目录下的dump文件: java_pid{xxxx}.hprof:
1)选择Leak Suspect report:
看到下图所示的界面:

2) 我们要看到OOM的对象的引用链路 也就是GC Roots 集合中的那个引用对象,因为它是虚拟机栈用的对象引用,所以会出现在GC Roots 集合中。
*下图所示: 通过跟踪Thread Stack 线程的栈可以找到具体出问题的代码行。
Line23代码:明显就是oomList装了超出堆内存的对象,导出OOM<

你可能感兴趣的:(Java,jvm,java,linux)