【发布时间】:2016-05-23 06:11:49
【问题描述】:
'intrinsify'是否意味着JVM的源代码有些'保守',但是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,对吗?
【问题讨论】:
标签: java multithreading jvm