StackOverflowError
- 线程请求的栈容量超过了JVM栈允许的最大容量。
- 线程请求的栈容量超过本地方法栈允许的最大容量。
OutOfMemoryError
- JVM栈可以动态扩展,并且扩展的动作已经尝试过,但是目前无法申请到足够的内存去完成扩展,或者在建立新的线程时没有足够的内存去创建对应的JVM栈。
- 实际所需的堆超过了自动内存管理系统(GC)能提供的最大容量。
- 方法区的内存空间不能满足内存分配请求。
- 当创建类或接口的时候,构造运行时常量池所需要的内存空间超过了方法区所能提供的最大值。
- 本地方法栈可以动态扩展,并且扩展的动作已经尝试过,但是目前无法申请到足够的内存去完成扩展,或者在建立新的线程时没有足够的内存去创建对应的本地方法栈。
备注:摘自《Java虚拟机规范》。