Java HotSpot 中内部方法的汇编实现代码在哪里?
Where is the assembly implementation code of the intrinsic method in Java HotSpot?
从 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
?
but how to find the actually implementation(assembly code I think) of
the method _getByte
通过在您的 IDE 中查找 vmIntrinsics::_getByte
或简单地通过 grepping HotSpot 源。
但是,您找不到汇编代码。 HotSpot 中对内部方法的调用通常会转换为 JIT 编译器的中间表示 (IR)。对应的IR节点在编译解析阶段手动添加到节点图中。
由于不同的JIT编译器有不同的IR,需要为C1和C2分别实现intrinsics。
例如_getByte
,
- 内在函数的 C1 实现在
GraphBuilder::append_unsafe_get_obj
;
- 内在的 C2 实现在
LibraryCallKit::inline_unsafe_access
.
从 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
?
but how to find the actually implementation(assembly code I think) of the method _getByte
通过在您的 IDE 中查找 vmIntrinsics::_getByte
或简单地通过 grepping HotSpot 源。
但是,您找不到汇编代码。 HotSpot 中对内部方法的调用通常会转换为 JIT 编译器的中间表示 (IR)。对应的IR节点在编译解析阶段手动添加到节点图中。
由于不同的JIT编译器有不同的IR,需要为C1和C2分别实现intrinsics。
例如_getByte
,
- 内在函数的 C1 实现在
GraphBuilder::append_unsafe_get_obj
; - 内在的 C2 实现在
LibraryCallKit::inline_unsafe_access
.