# HG changeset patch # User kbarrett # Date 1524815820 14400 # Node ID f276b348ec14ed9ba9e044f30d50e077c93ce1d0 # Parent 22eb3e22f24559cb31987cd696dd6c6fbeecae21 8202230: Provide accessors for JNIHandles storage objects Summary: Add JNIHandles::[weak_]global_handles(). Reviewed-by: coleenp, tschatzl diff -r 22eb3e22f245 -r f276b348ec14 src/hotspot/share/runtime/jniHandles.cpp --- a/src/hotspot/share/runtime/jniHandles.cpp Fri Apr 27 07:59:29 2018 +0200 +++ b/src/hotspot/share/runtime/jniHandles.cpp Fri Apr 27 03:57:00 2018 -0400 @@ -39,6 +39,16 @@ OopStorage* JNIHandles::_global_handles = NULL; OopStorage* JNIHandles::_weak_global_handles = NULL; +OopStorage* JNIHandles::global_handles() { + assert(_global_handles != NULL, "Uninitialized JNI global handles"); + return _global_handles; +} + +OopStorage* JNIHandles::weak_global_handles() { + assert(_weak_global_handles != NULL, "Uninitialized JNI weak global handles"); + return _weak_global_handles; +} + jobject JNIHandles::make_local(oop obj) { if (obj == NULL) { @@ -96,7 +106,7 @@ if (!obj.is_null()) { // ignore null handles assert(oopDesc::is_oop(obj()), "not an oop"); - oop* ptr = _global_handles->allocate(); + oop* ptr = global_handles()->allocate(); // Return NULL on allocation failure. if (ptr != NULL) { assert(*ptr == NULL, "invariant"); @@ -120,7 +130,7 @@ if (!obj.is_null()) { // ignore null handles assert(oopDesc::is_oop(obj()), "not an oop"); - oop* ptr = _weak_global_handles->allocate(); + oop* ptr = weak_global_handles()->allocate(); // Return NULL on allocation failure. if (ptr != NULL) { assert(*ptr == NULL, "invariant"); @@ -167,7 +177,7 @@ assert(!is_jweak(handle), "wrong method for detroying jweak"); oop* oop_ptr = jobject_ptr(handle); RootAccess::oop_store(oop_ptr, (oop)NULL); - _global_handles->release(oop_ptr); + global_handles()->release(oop_ptr); } } @@ -177,23 +187,23 @@ assert(is_jweak(handle), "JNI handle not jweak"); oop* oop_ptr = jweak_ptr(handle); RootAccess::oop_store(oop_ptr, (oop)NULL); - _weak_global_handles->release(oop_ptr); + weak_global_handles()->release(oop_ptr); } } void JNIHandles::oops_do(OopClosure* f) { - _global_handles->oops_do(f); + global_handles()->oops_do(f); } void JNIHandles::weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f) { - _weak_global_handles->weak_oops_do(is_alive, f); + weak_global_handles()->weak_oops_do(is_alive, f); } void JNIHandles::weak_oops_do(OopClosure* f) { - _weak_global_handles->weak_oops_do(f); + weak_global_handles()->weak_oops_do(f); } @@ -216,11 +226,11 @@ assert(handle != NULL, "precondition"); jobjectRefType result = JNIInvalidRefType; if (is_jweak(handle)) { - if (is_storage_handle(_weak_global_handles, jweak_ptr(handle))) { + if (is_storage_handle(weak_global_handles(), jweak_ptr(handle))) { result = JNIWeakGlobalRefType; } } else { - switch (_global_handles->allocation_status(jobject_ptr(handle))) { + switch (global_handles()->allocation_status(jobject_ptr(handle))) { case OopStorage::ALLOCATED_ENTRY: result = JNIGlobalRefType; break; @@ -277,33 +287,31 @@ bool JNIHandles::is_global_handle(jobject handle) { assert(handle != NULL, "precondition"); - return !is_jweak(handle) && is_storage_handle(_global_handles, jobject_ptr(handle)); + return !is_jweak(handle) && is_storage_handle(global_handles(), jobject_ptr(handle)); } bool JNIHandles::is_weak_global_handle(jobject handle) { assert(handle != NULL, "precondition"); - return is_jweak(handle) && is_storage_handle(_weak_global_handles, jweak_ptr(handle)); + return is_jweak(handle) && is_storage_handle(weak_global_handles(), jweak_ptr(handle)); } size_t JNIHandles::global_handle_memory_usage() { - return _global_handles->total_memory_usage(); + return global_handles()->total_memory_usage(); } size_t JNIHandles::weak_global_handle_memory_usage() { - return _weak_global_handles->total_memory_usage(); + return weak_global_handles()->total_memory_usage(); } // We assume this is called at a safepoint: no lock is needed. void JNIHandles::print_on(outputStream* st) { assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint"); - assert(_global_handles != NULL && _weak_global_handles != NULL, - "JNIHandles not initialized"); st->print_cr("JNI global refs: " SIZE_FORMAT ", weak refs: " SIZE_FORMAT, - _global_handles->allocation_count(), - _weak_global_handles->allocation_count()); + global_handles()->allocation_count(), + weak_global_handles()->allocation_count()); st->cr(); st->flush(); } diff -r 22eb3e22f245 -r f276b348ec14 src/hotspot/share/runtime/jniHandles.hpp --- a/src/hotspot/share/runtime/jniHandles.hpp Fri Apr 27 07:59:29 2018 +0200 +++ b/src/hotspot/share/runtime/jniHandles.hpp Fri Apr 27 03:57:00 2018 -0400 @@ -115,6 +115,9 @@ static void weak_oops_do(BoolObjectClosure* is_alive, OopClosure* f); // Traversal of weak global handles. static void weak_oops_do(OopClosure* f); + + static OopStorage* global_handles(); + static OopStorage* weak_global_handles(); };