Java中抛出的内存异常总结
根据上述的总结:可以整理出来,JVM在运行的时候大致会分为五个区域。方法区、堆区、本地方法栈、虚拟机栈、程序计数器。
其中程序计数器不会报出OutOfMemoryError错误,其他的都有可能会报出这个错误。
StackOverflowError:如果线程请求的栈深度大于虚拟机所允许的深度就会报这样的错误。
OutOfMemoryError:如果虚拟机栈可以动态扩展(当前大部分的java虚拟机都可以动态的扩展,只不过java虚拟机规范中也允许固定长度的虚拟机栈),如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError异常。
测试用例:
1:StackOverflowError错误
堆栈溢出错误一般是递归调用。
2:OutOfMemoryError错误
下面的代码在运行时候会报出这样的错误。