JVM 中的 at ReturnAddress 是什么意思?

What does `at ReturnAddress` mean in JVM?

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

2.3.3. The returnAddress Type and Values

我有一些问题。 returnAddress是什么?

returnAddress是上一帧的地址吗?

谁能简单解释一下?

The returnAddress type is used by the Java Virtual Machine's jsr, ret, and jsr_w instructions (§jsr, §ret, §jsr_w)

我看到returnAddress被指示jsr,jsr_w,ret使用(最后声明为Java),从JDK7开始虚拟机不允许出现这几个指令(jsr..) ,那么它还有存在的意义吗?

Is returnAddress the address of the previous frame?

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

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

I saw that returnAddress was instructed jsr,jsr_w,ret using (finally statement for Java), starting from JDK7 virtual machine is not allowed to appear these several instructions …, so does he still have a point of existence?

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

不过,只要 JVM 向后兼容旧的 class 文件,returnAddress 就是一回事。