每个方法都分配有自己的激活记录。现在,如果该激活记录上存在堆栈溢出,但执行线程的堆栈上仍有剩余空间,是否会发生溢出并且线程停止,或者会在堆栈上为激活记录分配更多空间? 感谢您提前的帮助:)
框架始终足够大,可以容纳其所属方法执行的所有局部变量和临时操作数值。因此,帧内不可能发生堆栈溢出。当一个方法即将被调用时,被调用方法的一个新帧将被放置在堆栈上,但如果堆栈上没有足够的空间容纳该帧,则会抛出一个StackOverflowError
。
StackOverflowError
。
但是这是否可以被视为帧扩展,而不是将额外的非帧数据推送到堆栈,这是有争议的。帧通常被视为固定大小的实体,因为它的全部要点是具有固定大小的数据结构,以消除频繁更改堆栈指针的需要。