首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈帧大小是否有上限?

堆栈帧大小是否有上限?
EN

Stack Overflow用户
提问于 2013-10-25 06:02:04
回答 3查看 2.3K关注 0票数 5

对于堆,我们有一个内存不足的错误,但是(出于好奇地问),单个堆栈的大小是否有一个等效的限制?如果没有,那么如果堆栈帧需要多馀的内存(如数千个局部变量等),那么如何防止这种溢出呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-25 06:05:46

如果线程请求的堆栈空间比可用的要大,那么它将接收到一个StackOverflowError。

http://docs.oracle.com/javase/7/docs/api/java/lang/StackOverflowError.html

单个堆栈帧的大小在编译时确定,并与方法的代码一起存储在类文件中。实际上有两个字段:局部变量数组的大小和操作数堆栈的深度。两者都限制在2^16-1。http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#1546

票数 5
EN

Stack Overflow用户

发布于 2013-10-25 06:07:17

我认为,分配给运行时堆栈的空间是单个执行线程上所有堆栈帧的总和。

大多数OSes的默认大小不同。看看这些医生。如果需要使用-Xss JVM参数,可以增加大小。

jvm/jrockit/jrdocs/refman/optionX.html

票数 1
EN

Stack Overflow用户

发布于 2013-10-25 06:11:07

每个线程都有自己的堆栈空间分配。您可以在Java命令行上使用-Xss选项设置此分配的大小;默认情况在不同平台上不同,但始终是“每个线程”的数量。

限制是每个线程的内存量,而不是堆栈上的条目数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19582194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档