我正在读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 ..),所以它仍然有存在点?
答案 0 :(得分:4)
returnAddress是前一帧的地址吗?
否,returnAddress
是当前字节码中包含jsr
或jsr_w
和ret
指令的位置。
如the documentation of these instructions所述,它用于表示紧接jsr
或jsr_w
指令之后的字节码位置,以允许ret
在该位置恢复。
我看到
returnAddress
是使用jsr,jsr_w,ret
的(针对Java的最终声明)的指令,从JDK7虚拟机开始不允许出现这几条指令……所以他仍然存在?
在版本为51或更高版本的Java类中,这些指令可能不会出现,因此,代码可能永远不会处理类型returnAddress
的值。与此相关,StackMapTable
attributes无法表示类型returnAddress
。
不过,只要JVM向后兼容较旧的类文件,returnAddress
就是一个问题。