我们有一个堆内存不足的错误,但是(只是出于好奇而问)是否对单个堆栈的大小有等效的限制?如果不是,那么如果堆栈帧需要多余的内存(如数千个局部变量等),那么如何防止这种溢出?
最佳答案
如果线程请求的堆栈空间多于可用的堆栈空间,它会收到 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
关于java - 堆栈帧大小是否有上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19582194/