--- old/src/share/vm/runtime/jniHandles.cpp 2017-04-25 16:45:48.379172637 +0200 +++ new/src/share/vm/runtime/jniHandles.cpp 2017-04-25 16:45:48.263172641 +0200 @@ -28,17 +28,23 @@ #include "memory/iterator.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" +#include "runtime/access.inline.hpp" #include "runtime/jniHandles.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/thread.inline.hpp" -#if INCLUDE_ALL_GCS -#include "gc/g1/g1SATBCardTableModRefBS.hpp" -#endif JNIHandleBlock* JNIHandles::_global_handles = NULL; JNIHandleBlock* JNIHandles::_weak_global_handles = NULL; oop JNIHandles::_deleted_handle = NULL; +oop JNIHandles::resolve_handle(jobject handle) { + oop* addr = oop_addr(handle); + if (is_jweak(handle)) { + return RootAccess::oop_load(addr); + } else { + return RootAccess::oop_load(addr); + } +} jobject JNIHandles::make_local(oop obj) { if (obj == NULL) { @@ -50,7 +56,6 @@ } } - // optimized versions jobject JNIHandles::make_local(Thread* thread, oop obj) { @@ -110,33 +115,17 @@ return res; } -template -oop JNIHandles::resolve_jweak(jweak handle) { - assert(is_jweak(handle), "precondition"); - oop result = jweak_ref(handle); - result = guard_value(result); -#if INCLUDE_ALL_GCS - if (result != NULL && UseG1GC) { - G1SATBCardTableModRefBS::enqueue(result); - } -#endif // INCLUDE_ALL_GCS - return result; -} - -template oop JNIHandles::resolve_jweak(jweak); -template oop JNIHandles::resolve_jweak(jweak); - void JNIHandles::destroy_global(jobject handle) { if (handle != NULL) { assert(is_global_handle(handle), "Invalid delete of global JNI handle"); - jobject_ref(handle) = deleted_handle(); + *oop_addr(handle) = deleted_handle(); } } void JNIHandles::destroy_weak_global(jobject handle) { if (handle != NULL) { - jweak_ref(handle) = deleted_handle(); + *oop_addr(handle) = deleted_handle(); } }