Java HotSpot中内在方法的汇编实现代码在哪里?

Posted

技术标签:

【中文标题】Java HotSpot中内在方法的汇编实现代码在哪里?【英文标题】:Where is the assembly implementation code of the intrinsic method in Java HotSpot? 【发布时间】:2018-01-11 02:29:48 【问题描述】:

从http://hg.openjdk.java.net/jdk8/jdk8/hotspot/file/87ee5ee27509/src/share/vm/classfile/vmSymbols.hpp,我可以看到内部方法声明如下:

do_intrinsic(_getByte, sun_misc_Unsafe, getByte_name, getByte_signature, F_RN) \

但是如何找到方法_getByte的实际实现(我认为是汇编代码)?

【问题讨论】:

【参考方案1】:

但是如何找到实际的实现(我认为的汇编代码) _getByte 方法

通过在您的 IDE 中查找 vmIntrinsics::_getByte 或简单地通过 grepping HotSpot 源。

但是,您不会找到汇编代码。 HotSpot 中对内部方法的调用通常会转换为 JIT 编译器的中间表示 (IR)。对应的IR节点在编译的解析阶段手动添加到节点图中。

由于不同的 JIT 编译器具有不同的 IR,因此需要为 C1 和 C2 分别实现内部函数。

比如_getByte

内在函数的 C1 实现在 GraphBuilder::append_unsafe_get_obj; 内在函数的 C2 实现位于 LibraryCallKit::inline_unsafe_access

【讨论】:

如果我们调用内部方法而不使用JIT(仅在JVM中使用解释器)会发生什么情况,IR会被解释器使用吗? @Jason 只有 JIT 编译器知道内在函数。解释器调用常规(Java 或 JNI)实现。

以上是关于Java HotSpot中内在方法的汇编实现代码在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

内在编码和汇编编码哪个更好? [关闭]

使用hsdis查看jit生成的汇编代码

Java同步锁Synchronized底层源码和原理剖析

HotSpot VM执行引擎的实现

函数调用与汇编指令的关系

5.HotSpot的算法实现