src/hotspot/share/classfile/systemDictionary.cpp
changeset 55740 b3ff56f955c8
parent 55635 0fb70c9118ce
child 57777 90ead0febf56
--- 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;