以openjdk代码为例:
解释器
首先,咱们要确保 JVM 能“听懂”ARM64的指令。这部分的工作在解释器代码里,位置在 src/hotspot/cpu/aarch64
目录下。对于每条 Java 字节码指令,我们需要用 ARM64 的汇编语言来实现。在 OpenJDK 中,解释器的实现里,你会看到很多 mov
、add
、ldr
之类的操作,这些都是“往寄存器里放东西”或“从寄存器里取东西”的动作。
举个例子,来看一下 aload
字节码在 ARM64 的实现。这个指令主要是把局部变量加载到栈上。打开 src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
文件,找到这个代码:
void TemplateTable::aload() {
int index = bytecode_arg(0);
__ ldr(result_reg, Address(local_base, index * wordSize));
__ push(result_reg);
}
对比一下 x86 的版本,在 src/hotspot/cpu/x86/templateTable_x86.cpp
中:
void TemplateTable::aload() {
int index