Java的OutOfMemoryError和StackOverflowError
Java Virtual Machine定义了两种异常:OutOfMemoryError与StackOverflowError。
OutOfMemoryError:Java启动一个线程时,JVM没有足够的内存空间为该线程分配Java栈,JVM抛出OutOfMemoryError异常。
StackOverflowError:Java启动一个线程时,JVM为它分配一个栈,Java栈以帧为单位保持线程运行状态,当线程调用一个方法时,JVM压入一个新的栈帧到这个线程的栈中,只要这个方法没返回,这个栈帧就存在。如果方法的嵌套调用深度太深(如深度很深的递归),随着Java栈中的帧增多,最终导致线程的栈中的所有栈帧的大小总和大于-Xss设定的值,即产生StackOverflowError,栈溢出异常。
“ If the computation in a thread requires alarger native method stack than is permitted, the Java Virtual Machine throws aStackOverflowError . ”