< prev index next >

src/share/vm/prims/jni.cpp

Print this page
rev 14282 : Factor out keep-alive barrier from usual pre-barrier implementations.

*** 83,95 **** #include "utilities/events.hpp" #include "utilities/histogram.hpp" #include "utilities/internalVMTests.hpp" #include "utilities/macros.hpp" #include "utilities/vmError.hpp" - #if INCLUDE_ALL_GCS - #include "gc/g1/g1SATBCardTableModRefBS.hpp" - #endif // INCLUDE_ALL_GCS #if INCLUDE_JVMCI #include "jvmci/jvmciCompiler.hpp" #include "jvmci/jvmciRuntime.hpp" #endif --- 83,92 ----
*** 2075,2085 **** jobject ret = JNIHandles::make_local(env, o->obj_field(offset)); #if INCLUDE_ALL_GCS // If G1 is enabled and we are accessing the value of the referent // field in a reference object then we need to register a non-null // referent with the SATB barrier. - if (UseG1GC || (UseShenandoahGC && ShenandoahWriteBarrier)) { bool needs_barrier = false; if (ret != NULL && offset == java_lang_ref_Reference::referent_offset && InstanceKlass::cast(k)->reference_type() != REF_NONE) { --- 2072,2081 ----
*** 2087,2098 **** needs_barrier = true; } if (needs_barrier) { oop referent = JNIHandles::resolve(ret); ! G1SATBCardTableModRefBS::enqueue(referent); ! } } #endif // INCLUDE_ALL_GCS HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret); return ret; JNI_END --- 2083,2093 ---- needs_barrier = true; } if (needs_barrier) { oop referent = JNIHandles::resolve(ret); ! oopDesc::bs()->keep_alive_barrier(referent); } #endif // INCLUDE_ALL_GCS HOTSPOT_JNI_GETOBJECTFIELD_RETURN(ret); return ret; JNI_END
< prev index next >