【发布时间】:2020-10-28 04:09:57
【问题描述】:
我一直想知道方法的解释字节码在 JVM 内部存储在哪里(特别是 HotSpot x64)。我知道 JIT-ed 的方法被存储并且可以在 Method 结构中访问,但我试图了解 JVM 在哪里存储转换为汇编指令的字节码(我假设它存储它们,否则会有解释每次调用都会占用大量内存),因为我无法在内部源代码中找到它。
【问题讨论】:
标签: java jvm jit jvm-hotspot
我一直想知道方法的解释字节码在 JVM 内部存储在哪里(特别是 HotSpot x64)。我知道 JIT-ed 的方法被存储并且可以在 Method 结构中访问,但我试图了解 JVM 在哪里存储转换为汇编指令的字节码(我假设它存储它们,否则会有解释每次调用都会占用大量内存),因为我无法在内部源代码中找到它。
【问题讨论】:
标签: java jvm jit jvm-hotspot
解释字节码并不像您想象的那么昂贵。为什么 JVM 会花时间为运行一次的代码生成机器代码?最好等到某个方法或块达到 JIT 阈值,然后然后花时间启用跟踪 JIT。
src/share/vm/interpreter 子目录似乎就是您所追求的:
bytecodeInterpreter.cpp实现实际栈机;bytecodes.cpp 定义了每个操作码的形状和属性。bytecodes.h 声明所有字节码。templateTable.cpp 包含将 JVM 操作码映射到程序集的机制。cpu/*/vm/templateTable*.cpp 包含为给定 CPU 生成程序集 sn-ps 的实际代码。【讨论】: