< 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 >