在JVM中,“ ReturnAddress”处的含义是什么?

时间:2019-09-02 08:12:36

标签: java jvm bytecode jvm-bytecode

我正在读JVMS, §2 The Structure of The Java Virtual Machine

2.3.3. The returnAddress Type and Values

我在这里有一些问题。什么是returnAddress

returnAddress是前一帧的地址吗?

有人可以简要解释一下吗?

  

Java虚拟机的jsr,ret和jsr_w指令(§jsr,§ret,§jsr_w)使用returnAddress类型

我看到returnAddress是使用jsr,jsr_w,ret的指令(对于Java的最终声明),从JDK7虚拟机开始不允许出现这几条指令(jsr ..),所以它仍然有存在点?

1 个答案:

答案 0 :(得分:4)

  

returnAddress是前一帧的地址吗?

否,returnAddress是当前字节码中包含jsrjsr_wret指令的位置。

the documentation of these instructions所述,它用于表示紧接jsrjsr_w指令之后的字节码位置,以允许ret在该位置恢复。

  

我看到returnAddress是使用jsr,jsr_w,ret的(针对Java的最终声明)的指令,从JDK7虚拟机开始不允许出现这几条指令……所以他仍然存在?

在版本为51或更高版本的Java类中,这些指令可能不会出现,因此,代码可能永远不会处理类型returnAddress的值。与此相关,StackMapTable attributes无法表示类型returnAddress

不过,只要JVM向后兼容较旧的类文件,returnAddress就是一个问题。