登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
StackOverFlowError 和 OutOfMemoryError 的区别
StackOverFlowError 和 OutOfMemoryError 的区别
[ 复制链接 ]
哈妙思
4 天前
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
StackOverflowError
和
OutOfMemoryError
都是
JVM
抛出的严重错误,接下来我们简单看一下他们的区别。
StackOverFlowError:
栈内存不够深(线程调用
栈深度
超出限制)。
OutOfMemoryError:
目标内存区域不够大(堆、方法区等共享内存区域
容量耗尽
,无法为新对象分配足够空间)。
关于
JVM
的组成部分,大家可以看下这篇博文:JVM的组成部分。
一、StackOverFlowError:栈溢出
1、定义
当
单个线程的方法调用栈深度超出 JVM 允许的最大值
时,虚拟机栈无法再创建新的栈帧,触发此错误。
2、原因
方法调用链过长(如
无限递归、深层递归
);
单个
栈帧过大
(如方法内定义了超大的局部变量数组)。
3、场景
最典型:
无终止条件的递归调用
(方法反复调用自身,栈帧持续叠加)。
public class StackOverFlowTest {
// 递归调用,无终止条件
public static void recursiveCall() {
recursiveCall(); // 方法自身调用,栈帧不断入栈
}
public static void main(String[] args) {
recursiveCall();
// 运行结果:Exception in thread "main" java.lang.StackOverflowError
}
}
复制代码
深层
嵌套
调用(如 A 调用 B,B 调用 C,… 嵌套 10000+ 层)。
二、OutOfMemoryError(OOM):内存不足
1、定义
当
某块共享内存区域(堆、元空间等)容量耗尽,且 GC 无法回收足够内存
时,JVM 无法为新对象分配空间,触发此错误。
2、原因
内存泄漏
(无用对象被 GC Root 引用,无法回收,持续占用内存);
内存分配
过小
(如堆内存 -Xmx 设置过小,无法满足业务对象创建需求);
超大对象
直接超出内存限制(如创建 new byte[1024*1024*1024],超出堆最大容量)。
内存泄漏
可参考此博文 Java 哪些情况会导致内存泄漏。
3、场景
堆内存 OOM:
创建大量对象且无法被 GC 回收(如静态集合持有对象)。
元空间 OOM:
动态生成大量类(如 Spring / CGLIB 动态代理、频繁加载类文件),元空间(存储类信息)耗尽。
栈内存 OOM
(与 StackOverFlowError 不一样):创建大量线程(每个线程占用独立栈内存),总栈内存超出物理内存限制(不是单个线程栈深度,而是线程数量过多)。
一般来说,
StackOverflowError
的错误日志会包含
java.lang.StackOverflowError + 方法调用栈(at XXX.XXX.method(...))
;
OutOfMemoryError
的错误日志会有
Java heap space、Metaspace、Direct buffer memory 等标注
,这些信息便于我们直接定位。
StackOverflowError
像是
一条单行道上的车排得太长
,堵死了(栈帧太多)。
OutOfMemoryError
像是
一个停车场停满了车,再也没有空位
(堆空间不足)。
当服务出现
StackOverflowError
或者
OutOfMemoryError
时,服务会处于
不稳定
状态,甚至会自动关闭,此时,我们需及时排查原因。
同为万里江湖客,共见三生风月身。-- 烟沙九洲
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
StackOverFlowError
OutOfMemoryError
区别
相关帖子
抽象类VS接口:核心区别与实战选择
滑动时间窗口和固定时间窗口的区别
主键约束、唯一性约束、唯一性索引的区别
Spring AOP 与 Solon AOP 有什么区别?
linux系统目录和文件夹的区别
Spring @Component 和 @Bean 的区别与最佳实践
PostgreSQL三种关闭方式的区别
Motorola和Inter的区别
char和varchar的区别?VARCHAR(100)和 VARCHAR(10)的区别?Mysql字段类型20连问
Java单元测试、集成测试,区别
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
抽象类VS接口:核心区别与实战选择
4
928
站竣凰
2025-08-08
科技
滑动时间窗口和固定时间窗口的区别
7
570
蜴间囝
2025-08-12
安全
主键约束、唯一性约束、唯一性索引的区别
4
218
宗和玉
2025-08-13
业界
Spring AOP 与 Solon AOP 有什么区别?
5
458
啤愿
2025-08-23
安全
linux系统目录和文件夹的区别
5
1106
颖顿庐
2025-08-28
业界
Spring @Component 和 @Bean 的区别与最佳实践
6
1203
剧拧并
2025-08-29
业界
PostgreSQL三种关闭方式的区别
3
761
侧胥咽
2025-09-06
安全
Motorola和Inter的区别
4
838
史华乐
2025-10-13
业界
char和varchar的区别?VARCHAR(100)和 VARCHAR(10)的区别?Mysql字段类型20连问
3
961
珠尿娜
2025-10-13
业界
Java单元测试、集成测试,区别
1
468
距佰溘
2025-12-24
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
哈妙思
4 天前
关注
0
粉丝关注
23
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845358
4
xiangqian
638210
5
韶又彤
9994
6
宋子
9978
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9946
查看更多
今日好文热榜
1001
对线面试官系列:搞懂MySQL 回表机制,看这
472
轻量可定制!一款开源的 Windows 桌面硬件
532
解密Prompt系列67. 智能体的经济学:从架构
194
如何编写figma插件
808
2026年北京陪诊机构排行
837
Ruoyi框架 | 扩展部门数据权限实现
247
2025再见,码农当自强,47岁尚能饭否
166
在 Web 前端实现流式 TTS 播放
188
2025年终总结——在奔跑中前行
139
吴恩达深度学习课程四:计算机视觉 第四周
232
一个关于时间、节奏和前端动画的小实验:新
303
实用程序:解放双手!Python 打造 PDF 手写
220
Perigon.CLI 10.0 重磅发布【AspNetCore开
209
MongoDB 详解、应用场景及案例分析(AI)
395
RL 策略优化 (4.2章节)
67
0基础转行产品经理:墨刀还是Axure?从背景