博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
什么情况下会发生栈内存溢出。
阅读量:3892 次
发布时间:2019-05-23

本文共 469 字,大约阅读时间需要 1 分钟。

1.什么是栈

栈是先进后出的数据模型,这里指的是运行时栈,主要是进行指令存储和辅助运行。栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型。
如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverFlowError异常,方法递归调用产生这种结果。
如果JVM可以动态扩展,并且扩展动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建线程的时候没有足够的内存去创建对应的JVM Stack,那么JVM将抛出一个OutOfMemory异常(这是启动过多)
2.什么时候会有栈溢出
主要时候在进行递归的时候,在进行递归时,未完成不会释放资源,并且递归的次数不容易通过代码控制,如果超出边界就会导致栈溢出,在新建线程的时候没有足够的内存去创建对应的JVM Stack,那么JVM将抛出一个OutOfMemory异常(这是启动过多),这是主存储不够分配。
3.相关配置参数
-Xss :xxxb

转载地址:http://wdphn.baihongyu.com/

你可能感兴趣的文章
[小技巧] chrome 的 vim 插件
查看>>
在 Linux 中查看你的时区
查看>>
[小技巧] [trac] Fix AttributeError: 'NullTranslations' object has no attribute 'add'
查看>>
[小技巧] Mac OS X上键盘的键位重映射
查看>>
Java对Oracle中Clob类型数据的读取和写入
查看>>
Spring中Quartz的配置
查看>>
MyBatis 防止 % _ sql 注入攻击 解决方法
查看>>
plsql oracle 无法解析指定的连接标识符
查看>>
Linux后台开发应该具备技能
查看>>
Eclipse Tomcat 无法添加项目
查看>>
SVN更新失败 解决方法
查看>>
关于Java的File.separator
查看>>
linux定时任务的设置
查看>>
MySQL 5.7 完全傻瓜安装教程 图文
查看>>
Hibernate框架概述&SSH框架工作原理以及流程
查看>>
Aapche POI txt 导入excel
查看>>
C语言 ## __VA_ARGS__ 宏
查看>>
C++项目中的extern "C" {}
查看>>
(转)C++中extern “C”含义深层探索
查看>>
【日常小记】linux中强大且常用命令:find、grep
查看>>