StackOverFlowError(SOF)和OutOfMemoryError(OOM)的区别

StackOverFlowError:

当启动一个新的线程是虚拟机会为其分配一个新的栈空间,Java栈以帧为单位保证线程运行状态。当线程调用一个方法时JVM会压入一个新的栈帧到这个线程的栈空间中,只要这个方法还没有返回则这个栈帧就会一直存在。所以方法的嵌套调用太多(如递归调用),随着栈帧的增加导致总和大于JVM设置的-Xss值就会抛出StackOverFlowError异常

OutOfMemoryError:

堆内存溢出:当需要为对象示例化分配内存空间时,而堆的占用已经达到了设置的最大值(-Xmx),就会抛出OutOfMemoryError异常。

方法区内存溢出:方法区存放Java类信息(如类名、访问修饰符、常量池、字段描述、方法描述),在类加载器记载class文件到内存时JVM会提取累的这些信息到方法区,而此时如果需要存储这些类信息且方法区的内存占用已经达到最大值(-XX:MaxPermSize)则会抛出OutOfMemoryError异常。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值