将超级指令添加到 JVM
Adding SuperInstruction to JVM
我必须向 Java 添加新的 SuperInstructions,这是对字节码中某些指令序列的替换。我浏览了很多研究文章,但任何一篇文章都没有提到应该更新的文件名。
谁能告诉我 hotspot 文件,其中包含 JVM 的 Main Interpreter Loop,在 X86 等任何架构中都有 case 语句, ARM等
换句话说,我需要包含 opcodes 的文件的位置,以便我可以修改它们。
如果您不熟悉 HotSpot 源代码,添加新指令并不是一件容易的事。这不仅仅是修改几个位置的问题;这涉及许多 JVM 部分,包括
- Bytecode interpreter 和常量池解析器;
- Verifier;
- OopMap generator;
- C1 and C2 编译器及其解析器、优化器和代码生成器。
- 可能还有其他部分,具体取决于您的新指令的作用。
此外,HotSpot JVM 根本没有 'Main Interpreter Loop'。相反,有一个所谓的 'template interpreter',它是在 JVM 启动时在运行时生成的。对于每个字节码,都有一个依赖于平台的类似程序集的模板,该模板生成用于在所有可能的栈顶状态下执行此字节码的解释器片段。每个模板通常以分派到下一个字节码的序列结束。
要了解 x86 模板解释器的外观,请参阅 src/cpu/x86/vm/templateTable_x86.cpp。新说明将需要类似的模板。
我必须向 Java 添加新的 SuperInstructions,这是对字节码中某些指令序列的替换。我浏览了很多研究文章,但任何一篇文章都没有提到应该更新的文件名。
谁能告诉我 hotspot 文件,其中包含 JVM 的 Main Interpreter Loop,在 X86 等任何架构中都有 case 语句, ARM等
换句话说,我需要包含 opcodes 的文件的位置,以便我可以修改它们。
如果您不熟悉 HotSpot 源代码,添加新指令并不是一件容易的事。这不仅仅是修改几个位置的问题;这涉及许多 JVM 部分,包括
- Bytecode interpreter 和常量池解析器;
- Verifier;
- OopMap generator;
- C1 and C2 编译器及其解析器、优化器和代码生成器。
- 可能还有其他部分,具体取决于您的新指令的作用。
此外,HotSpot JVM 根本没有 'Main Interpreter Loop'。相反,有一个所谓的 'template interpreter',它是在 JVM 启动时在运行时生成的。对于每个字节码,都有一个依赖于平台的类似程序集的模板,该模板生成用于在所有可能的栈顶状态下执行此字节码的解释器片段。每个模板通常以分派到下一个字节码的序列结束。
要了解 x86 模板解释器的外观,请参阅 src/cpu/x86/vm/templateTable_x86.cpp。新说明将需要类似的模板。