JVM异常说明(超链接) 一文中已介绍了,JVM每个运行时区域——程序计数器 、Java虚拟机栈、本地方法栈、Java堆、方法区、直接内存发生OutOfMemoryError的不同原因和不同错误信息。 Java堆,是线程共享内存,几乎所有的对象实例以及数组都应在堆上分配。如下堆的内存泄漏错误也是我们常常遇到的
java.lang.OutOfMemoryError: Java heap space查看系统日志 已有Full GC的日志,紧接着开始报错OutOfMemoryError
分析Heap Dump 导入Dump后,可以看到占用内存最大的类和实例——OOMMonitor类中的placeholder变量
示例代码 public class OOMMonitor { static class OOMobject { public byte[] placeholder = new byte[64 * 1024]; } public static void fillHeap(int num) throws InterruptedException { List<OOMobject> list = new ArrayList<OOMobject>(); for (int i = 0; i < num; i++) { //稍作延时,令监视曲线的变化更加明显 Thread.sleep(500); list.add(new OOMobject()); System.out.println("Hello World"); } } public static void main(String[] args) throws Exception { fillHeap(1000); } } 示例VM配置参数 -Xms20m -Xmx20m -verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump.hprof
扫一扫,关注我
