栈溢出和栈内存溢出的区别(一张图解释清楚)/ StackOverFlow和OutOfMemory的区别

目录

解释图:

何时发生栈内存溢出?

什么时候会发生栈溢出?

帮助记忆:


解释图:

上图是JVM内存模型中最为重要的三部分,方法区中存储的是类模板,堆中存放的是实例对象,每个线程都会生成一个栈

何时发生栈内存溢出?

对于一台服务器而言,每一个用户请求,都会产生一个线程来处理这个请求,每一个线程对应着一个栈,栈会分配内存,此时如果请求过多,这时候内存不够了,就会发生栈内存溢出

什么时候会发生栈溢出?

栈溢出是指不断的调用方法,不断的压栈,最终超出了栈允许的栈深度,就会发生栈溢出,比如递归操作没有终止,死循环

帮助记忆:

可以把内存比作是一个大箱子,栈是一个小箱子,栈溢出是指小箱子装不下了;而栈内存溢出是大箱子在也装不下小箱子了

更多精彩内容,欢迎关注公众号:stackoverflow

OOM是指Out of Memory,即内存溢出。在Java中,当程序需要的内存超过了JVM分配给程序的内存限制时,就会发生OOM错误。一种常见的情况是堆内存溢出,当程序不断创建新对象占用堆内存时,如果堆内存的大小不够,就会导致OOM错误。引用中提到的方法区溢出也是一种OOM错误,当方法区的内存占用已经达到最大值时,进一步尝试存储类信息将导致溢出异常。 StackOverflow是指栈溢出错误。在Java中,每个线程都有一个与之关联的以帧为单位保持线程运行状态。当一个线程调用一个方法时,JVM会将一个新的帧压入中,只有当方法返回后,该帧才会消失。如果方法的嵌套调用层次太多,导致中的帧数量超过了设置的大小(通过-Xss设置),就会发生StackOverflowError溢出异常。引用中解释了当方法的嵌套调用层次太多时,中的帧数量超过大小的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [StackOverflow和OOM的区别](https://blog.csdn.net/JAVA_I_want/article/details/103136271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值