'intrinsify'在JVM源代码中是什么意思?
What does 'intrinsify' mean in the JVM source code?
是否'intrinsify'意味着JVM的源代码有点'conservative',但是JIT编译器可以在JVM预热时做一些优化?
例如,
UNSAFE_ENTRY(void, Unsafe_SetOrderedObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h))
UnsafeWrapper("Unsafe_SetOrderedObject");
oop x = JNIHandles::resolve(x_h);
oop p = JNIHandles::resolve(obj);
void* addr = index_oop_from_field_offset_long(p, offset);
OrderAccess::release();
if (UseCompressedOops) {
oop_store((narrowOop*)addr, x);
} else {
oop_store((oop*)addr, x);
}
OrderAccess::fence(); <==There is a full memory barrier to ensure visibility which is NOT strictly required
UNSAFE_END
不需要putOrderedObject来确保immediate visiblity
,但是我们可以看到有一个完整的内存屏障将存储附加到指定的对象,所以我说JVM是conservative
,但是JIT 编译器可以在运行时优化这个内存屏障,这就是所谓的 instrinsify
,对吗?
JVM 内部函数是 JDK 中的方法,JIT 会为此发出专门的机器指令序列,这些指令可以直接内联到调用程序中。例如,在 x86 上,Integer.bitCount(int)
可以替换为 POPCNT
指令。
纯粹的 java 实现可能太复杂而无法被窥孔优化识别——例如不像模拟旋转和移位——并且 JNI 开销会扼杀使用手工制作的程序集的任何性能提升一个操作。
许多不安全的方法也被内在化,因此这些方法调用不是优化器的黑盒(就像 JNI 方法那样),是的,这允许它不那么保守。但这只是内在化的子属性。
(这些基本上是 "hotspot intrinsics" 的前 google 结果)
是否'intrinsify'意味着JVM的源代码有点'conservative',但是JIT编译器可以在JVM预热时做一些优化? 例如,
UNSAFE_ENTRY(void, Unsafe_SetOrderedObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h))
UnsafeWrapper("Unsafe_SetOrderedObject");
oop x = JNIHandles::resolve(x_h);
oop p = JNIHandles::resolve(obj);
void* addr = index_oop_from_field_offset_long(p, offset);
OrderAccess::release();
if (UseCompressedOops) {
oop_store((narrowOop*)addr, x);
} else {
oop_store((oop*)addr, x);
}
OrderAccess::fence(); <==There is a full memory barrier to ensure visibility which is NOT strictly required
UNSAFE_END
不需要putOrderedObject来确保immediate visiblity
,但是我们可以看到有一个完整的内存屏障将存储附加到指定的对象,所以我说JVM是conservative
,但是JIT 编译器可以在运行时优化这个内存屏障,这就是所谓的 instrinsify
,对吗?
JVM 内部函数是 JDK 中的方法,JIT 会为此发出专门的机器指令序列,这些指令可以直接内联到调用程序中。例如,在 x86 上,Integer.bitCount(int)
可以替换为 POPCNT
指令。
纯粹的 java 实现可能太复杂而无法被窥孔优化识别——例如不像模拟旋转和移位——并且 JNI 开销会扼杀使用手工制作的程序集的任何性能提升一个操作。
许多不安全的方法也被内在化,因此这些方法调用不是优化器的黑盒(就像 JNI 方法那样),是的,这允许它不那么保守。但这只是内在化的子属性。
(这些基本上是 "hotspot intrinsics" 的前 google 结果)