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. 生成程序集片段的实际代码
我一直想知道方法的解释字节码存储在 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. 生成程序集片段的实际代码