< prev index next >

src/share/vm/classfile/dictionary.cpp

Print this page

@@ -28,10 +28,11 @@
 #include "classfile/dictionary.hpp"
 #include "classfile/protectionDomainCache.hpp"
 #include "classfile/systemDictionary.hpp"
 #include "classfile/systemDictionaryShared.hpp"
 #include "memory/iterator.hpp"
+#include "memory/metaspaceClosure.hpp"
 #include "memory/resourceArea.hpp"
 #include "oops/oop.inline.hpp"
 #include "runtime/orderAccess.inline.hpp"
 #include "utilities/hashtable.inline.hpp"
 

@@ -278,10 +279,25 @@
       f(k, probe->loader_data());
     }
   }
 }
 
+// Used to scan and relocate the classes during CDS archive dump.
+void Dictionary::classes_do(MetaspaceClosure* it) {
+  for (int index = 0; index < table_size(); index++) {
+    for (DictionaryEntry* probe = bucket(index);
+                          probe != NULL;
+                          probe = probe->next()) {
+      it->push(probe->klass_addr());
+      if (DumpSharedSpaces) {
+        ((SharedDictionaryEntry*)probe)->metaspace_pointers_do(it);
+      }
+    }
+  }
+}
+
+
 void Dictionary::oops_do(OopClosure* f) {
   // Only the protection domain oops contain references into the heap. Iterate
   // over all of them.
   _pd_cache_table->oops_do(f);
 }

@@ -406,11 +422,11 @@
   DictionaryEntry* entry = get_entry(index, hash, name, loader_data);
   return entry->is_valid_protection_domain(protection_domain);
 }
 
 
-void Dictionary::reorder_dictionary() {
+void Dictionary::reorder_dictionary_for_sharing() {
 
   // Copy all the dictionary entries into a single master list.
 
   DictionaryEntry* master_list = NULL;
   for (int i = 0; i < table_size(); ++i) {
< prev index next >