"aoad"或"areturn"等JVM指令中的'a'是什么意思?

bzi*_*zim 2 jvm terminology

"aoad"或"areturn"等JVM指令中的'a'是什么意思?我知道他们在引用上运行,但为什么它们被命名为'aload','astore'等而不是'rload','rstore'等?

apa*_*gin 6

我相信历史上'a'代表'地址',因为对象引用只是堆中的普通地址.

可以在Sun Microsystems 的K虚拟机源代码中找到对此想法的支持- 这是Java ME的第一个Java虚拟机之一.可以从CLDC 1.1 RI页面下载源.

片段来自kvm/VmCommon/src/bytecodes.c:

#if STANDARDBYTECODES
SELECT(ILOAD)            /* Load integer from local variable */
        unsigned int index = ip[1];
        pushStack(lp[index]);
DONE(2)
#endif

...

#if STANDARDBYTECODES
SELECT(ALOAD)            /* Load address from local variable */
        unsigned int index = ip[1];
        pushStack(lp[index]);
DONE(2)
#endif
Run Code Online (Sandbox Code Playgroud)

这里

  • 它还符合这样一个事实:指令 `astore` 可以存储 *returnaddress* 类型的值(最高可达 Java 6)…… (2认同)
  • @shaoyihe 第一个“a”代表“地址”,第二个 - 代表“数组”。该指令从数组加载引用。 (2认同)