JAVA内存溢出

/**
 * 1.堆溢出
 * 2.栈溢出
 * 3.MetaSpace溢出
 * 4.直接内存溢出
 * 5.堆外内存溢出
 */

1、栈溢出

设置每个线程的栈大小为 1m  -Xss1m

public class OOMPrac {

    private static void test(int index){
        ++index;
        test(index);
    }

    public static void main(String[] args){
        test(1);
    }
}

输出:

Exception in thread "main" java.lang.StackOverflowError
	at OOMPrac.test(OOMPrac.java:13)
	at OOMPrac.test(OOMPrac.java:13)
	at OOMPrac.test(OOMPrac.java:13)
	at OOMPrac.test(OOMPrac.java:13)

2、堆溢出:

public class HeapOOMPrac {

    public static void main(String[] args){
        List<Object> alist = new ArrayList<>();
        while (true){
            alist.add(new byte[1024*1024]);
        }
    }
}

输出:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at HeapOOMPrac.main(HeapOOMPrac.java:18)

3、MetaSpace溢出

当我们指定了MaxMetaspaceSize,运行时不断加载类可能出现溢出。

4、堆外内存

美团的一篇文章: Netty堆外内存泄露排查盛宴

--------EOF---------
微信分享/微信扫码阅读