堆栈帧大小是否有上限

Jav*_*per 5 java jvm heap-memory out-of-memory stack-memory

我们有一个堆的内存不足错误,但是(只是出于好奇而询问)单个堆栈的大小是否有相同的限制?如果不是,那么如果堆栈帧(如数千个局部变量等)需要多余的内存,那么什么可以防止这种溢出?

Jon*_*oni 5

如果线程请求的堆栈空间多于可用的堆栈空间,则会收到 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