之前对于StackOverflowError和OutOfMemoryError这2个错误一直理解得不太清楚。就专门去看了下源代码,找出了这2个异常引发的原因。就对应与了相应的例子:
1、StackOverflowError.
源代码解释说:抛出这个错误是因为递归太深.
eg:
public class StackOverflowTest { public static void main(String[] args){ method(); } private static void method() { while(true){ method(); } } }
运行结果:
2、OutOfMemoryError
源代码解释说:因为内存溢出,JVM不能分配给对象的创建空间.并且GC也不能够回收足够的空间.
eg:
public class OutOfMemoryTest { public static void main(String[] args){ List<Object> list = new ArrayList<Object>(); while(true){ int[] index = new int[20_0000_0000]; list.add(index); } } }
运行结果: