HotSpot JVM 在哪里存储解释后的字节码?

Where does the HotSpot JVM store interpreted bytecode?

我一直想知道方法的解释字节码存储在 JVM(特别是 HotSpot x64)内部的什么位置。我知道 JIT-ed 的方法被存储并可以在 Method 结构中访问,但我试图了解 JVM 在哪里存储转换为汇编指令的字节码(我假设它存储它们,否则解释每次调用都会占用大量内存),因为我无法在内部源代码中找到它。

解释字节码并不像您想象的那么昂贵。为什么 JVM 会花时间为运行一次的代码生成机器代码?最好等到某个方法或块达到 JIT 阈值,然后 然后 花时间启用跟踪 JIT。

src/share/vm/interpreter 子目录似乎就是您要查找的目录:

  • bytecodeInterpreter.cpp实现了实际的栈机;
  • bytecodes.cpp 定义每个操作码的形状和属性。
  • bytecodes.h 声明所有字节码。
  • templateTable.cpp 包含将 JVM 操作码映射到程序集的机制。
  • cpu/*/vm/templateTable*.cpp 包含为给定 CPU.
  • 生成程序集片段的实际代码