< prev index next >

src/hotspot/share/jfr/leakprofiler/checkpoint/rootResolver.cpp

Print this page
@@ -96,13 +96,12 @@
    bool _complete;
  
    bool do_cldg_roots();
    bool do_object_synchronizer_roots();
    bool do_universe_roots();
-   bool do_jni_handle_roots();
+   bool do_oop_storage_roots();
    bool do_jvmti_roots();
-   bool do_vm_global_roots();
    bool do_management_roots();
    bool do_string_table_roots();
    bool do_aot_loader_roots();
  
    bool do_roots();

@@ -146,31 +145,35 @@
    ReferenceLocateClosure rlc(_callback, OldObjectRoot::_universe, OldObjectRoot::_type_undetermined, NULL);
    Universe::oops_do(&rlc);
    return rlc.complete();
  }
  
- bool ReferenceToRootClosure::do_jni_handle_roots() {
-   assert(!complete(), "invariant");
-   ReferenceLocateClosure rlc(_callback, OldObjectRoot::_global_jni_handles, OldObjectRoot::_global_jni_handle, NULL);
-   JNIHandles::oops_do(&rlc);
-   return rlc.complete();
+ bool ReferenceToRootClosure::do_oop_storage_roots() {
+   int i = 0;
+   for (OopStorageSet::Iterator it = OopStorageSet::strong_iterator(); !it.is_end(); ++it, ++i) {
+     assert(!complete(), "invariant");
+     OopStorage* oop_storage = *it;
+     OldObjectRoot::Type type = oop_storage == OopStorageSet::jni_global() ?
+                                OldObjectRoot::_global_jni_handle :
+                                OldObjectRoot::_global_oop_handle;
+     OldObjectRoot::System system = OldObjectRoot::System(OldObjectRoot::_strong_oop_storage_set_first + i);
+     ReferenceLocateClosure rlc(_callback, system, type, NULL);
+     oop_storage->oops_do(&rlc);
+     if (rlc.complete()) {
+       return true;
+     }
+   }
+   return false;
  }
  
  bool ReferenceToRootClosure::do_jvmti_roots() {
    assert(!complete(), "invariant");
    ReferenceLocateClosure rlc(_callback, OldObjectRoot::_jvmti, OldObjectRoot::_global_jni_handle, NULL);
    JvmtiExport::oops_do(&rlc);
    return rlc.complete();
  }
  
- bool ReferenceToRootClosure::do_vm_global_roots() {
-   assert(!complete(), "invariant");
-   ReferenceLocateClosure rlc(_callback, OldObjectRoot::_vm_global, OldObjectRoot::_type_undetermined, NULL);
-   OopStorageSet::vm_global()->oops_do(&rlc);
-   return rlc.complete();
- }
- 
  bool ReferenceToRootClosure::do_management_roots() {
    assert(!complete(), "invariant");
    ReferenceLocateClosure rlc(_callback, OldObjectRoot::_management, OldObjectRoot::_type_undetermined, NULL);
    Management::oops_do(&rlc);
    return rlc.complete();

@@ -201,25 +204,20 @@
    if (do_universe_roots()) {
     _complete = true;
      return true;
    }
  
-   if (do_jni_handle_roots()) {
+   if (do_oop_storage_roots()) {
     _complete = true;
      return true;
    }
  
    if (do_jvmti_roots()) {
     _complete = true;
      return true;
    }
  
-   if (do_vm_global_roots()) {
-    _complete = true;
-     return true;
-   }
- 
    if (do_management_roots()) {
     _complete = true;
      return true;
    }
  
< prev index next >