Java-JVM OutOfMemory 情况(JDK8)
JVM 运行时内存结构(Run-Time Data Areas) 内存溢出分为两大类:OutOfMemoryError 和 StackOverflowError。 一、HeapOomError (JVM 堆内存溢出) -Xms:初始值 -Xmx:最大值 -Xmn:最小值 public static void main(String[] args) { List<byte[]> list = new ArrayList<>(); int i = 0; while (true) { list.add(new byte[8 * 1024 * 1024]); System.out.println(++i); } } 二、MemoryLeakOomError(JVM 堆内存泄漏) Java 语言中是指,未使用的对象仍然在 JVM 堆空间中存在,任保留着引用,无法被 GC。不停的堆积最终触发堆内存溢出。 三、OverheadLimitOomError(垃圾回收超时内存溢出) # JDK6 新增错误类型。当 GC 为释放很小空间占用大量时间时抛出。 # (超过 98% 以上的时间去释放小于 2% 的堆空间) java.lang.OutOfMemoryError: GC overhead limit exceeded # 关闭上述检查功能,通常不治本,最终会 Java heap space