if块是否在JAVA中的堆栈框架中创建一个条目?

if块是否在JAVA中的堆栈框架中创建一个条目?,java,stack-frame,Java,Stack Frame,我正在遍历堆栈帧,所以每个函数调用都会被推送到堆栈帧中,并在完成时弹出,所以当执行if块时,它会被推到堆栈帧上,还是会在当前方法堆栈项中执行?一个“if”可能没有块,并且块通常没有变量声明,但是如果它有,该变量位于堆栈上(它引用的任何对象总是位于堆上)。它不是调用,因此不需要新的堆栈帧;我猜帧指针是put,堆栈指针是递减的,以便为它留出空间,可能是模4或模8以使CPU满意,当然在JAVA中它被初始化为零/空,空间位置被标识为(帧指针-N)。当块结束时,堆栈指针会重新递增,并且名称会被忘记。一个“

我正在遍历堆栈帧,所以每个函数调用都会被推送到堆栈帧中,并在完成时弹出,所以当执行if块时,它会被推到堆栈帧上,还是会在当前方法堆栈项中执行?

一个“if”可能没有块,并且块通常没有变量声明,但是如果它有,该变量位于堆栈上(它引用的任何对象总是位于堆上)。它不是调用,因此不需要新的堆栈帧;我猜帧指针是put,堆栈指针是递减的,以便为它留出空间,可能是模4或模8以使CPU满意,当然在JAVA中它被初始化为零/空,空间位置被标识为(帧指针-N)。当块结束时,堆栈指针会重新递增,并且名称会被忘记。

一个“if”可能没有块,并且块通常没有变量声明,但如果它有,则该变量在堆栈上(它引用的任何对象总是在堆上)。它不是调用,因此不需要新的堆栈帧;我猜帧指针是put,堆栈指针是递减的,以便为它留出空间,可能是模4或模8以使CPU满意,当然在JAVA中它被初始化为零/空,空间位置被标识为(帧指针-N)。当块结束时,堆栈指针会重新递增,并且名称会被忘记。

块中的局部变量会在堆栈上分配。问问自己:如果块是方法调用吗?是否涉及方法名?要通过的参数?不然后它可能不在堆栈上(事实上它不在堆栈上)。块中的局部变量在堆栈上分配。问问自己:if块是方法调用吗?是否涉及方法名?要通过的参数?不JVM规范从技术上讲并不涉及“帧指针”,而是使用行为非常相似的局部变量插槽。值得注意的是,每个此类插槽的生存期不能与方法中局部变量的范围完全匹配,而是由变量的第一次和最后一次使用决定的。所以它不像“在进入if块时增加堆栈指针”那样清晰。在离开(或上次使用)时增加,在进入时减少(和零)以创建空间,因为堆栈是内存顶部向下的?当然,jvm不是C而是类似的!JVM规范从技术上讲不是“帧指针”,而是使用行为非常相似的局部变量插槽。值得注意的是,每个此类插槽的生存期不能与方法中局部变量的范围完全匹配,而是由变量的第一次和最后一次使用决定的。所以它不像“在进入if块时增加堆栈指针”那样清晰。在离开(或上次使用)时增加,在进入时减少(和零)以创建空间,因为堆栈是内存顶部向下的?当然,jvm不是C而是类似的!