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