diff -r ba2bd51ce67e -r b3ff56f955c8 src/hotspot/share/classfile/systemDictionary.cpp --- a/src/hotspot/share/classfile/systemDictionary.cpp Wed Jul 17 08:33:38 2019 -0400 +++ b/src/hotspot/share/classfile/systemDictionary.cpp Thu Jul 18 14:57:32 2019 -0400 @@ -114,6 +114,7 @@ const int defaultProtectionDomainCacheSize = 1009; +OopStorage* SystemDictionary::_vm_global_oop_storage = NULL; OopStorage* SystemDictionary::_vm_weak_oop_storage = NULL; @@ -1844,7 +1845,7 @@ return unloading_occurred; } -void SystemDictionary::oops_do(OopClosure* f) { +void SystemDictionary::oops_do(OopClosure* f, bool include_handles) { f->do_oop(&_java_system_loader); f->do_oop(&_java_platform_loader); f->do_oop(&_system_loader_lock_obj); @@ -1852,6 +1853,10 @@ // Visit extra methods invoke_method_table()->oops_do(f); + + if (include_handles) { + vm_global_oop_storage()->oops_do(f); + } } // CDS: scan and relocate all classes referenced by _well_known_klasses[]. @@ -2893,12 +2898,22 @@ } void SystemDictionary::initialize_oop_storage() { + _vm_global_oop_storage = + new OopStorage("VM Global Oop Handles", + VMGlobalAlloc_lock, + VMGlobalActive_lock); + _vm_weak_oop_storage = new OopStorage("VM Weak Oop Handles", VMWeakAlloc_lock, VMWeakActive_lock); } +OopStorage* SystemDictionary::vm_global_oop_storage() { + assert(_vm_global_oop_storage != NULL, "Uninitialized"); + return _vm_global_oop_storage; +} + OopStorage* SystemDictionary::vm_weak_oop_storage() { assert(_vm_weak_oop_storage != NULL, "Uninitialized"); return _vm_weak_oop_storage;