< prev index next >

src/share/vm/classfile/dictionary.cpp

Print this page

        

@@ -175,10 +175,15 @@
           // The loader in this entry is alive. If the klass is dead,
           // (determined by checking the defining class loader)
           // the loader must be an initiating loader (rather than the
           // defining loader). Remove this entry.
           if (k_def_class_loader_data->is_unloading()) {
+            ResourceMark rm;
+            tty->print_cr("loader data %s loads class %s in loader data %s",
+                          loader_data->loader_name(),
+                          ik->name()->as_C_string(), k_def_class_loader_data->loader_name());
+            ShouldNotReachHere(); // isn't there a dependency created? or k_loader_data is parent of loader_data??
             // If we get here, the class_loader_data must not be the defining
             // loader, it must be an initiating one.
             assert(k_def_class_loader_data != loader_data,
                    "cannot have live defining loader and unreachable klass");
             // Loader is live, but class and its defining loader are dead.

@@ -264,27 +269,10 @@
   // Then iterate over the protection domain cache to apply the closure on the
   // previously marked ones.
   _pd_cache_table->always_strong_oops_do(blk);
 }
 
-
-void Dictionary::always_strong_classes_do(KlassClosure* closure) {
-  // Follow all system classes and temporary placeholders in dictionary
-  for (int index = 0; index < table_size(); index++) {
-    for (DictionaryEntry* probe = bucket(index);
-                          probe != NULL;
-                          probe = probe->next()) {
-      Klass* e = probe->klass();
-      ClassLoaderData* loader_data = probe->loader_data();
-      if (is_strongly_reachable(loader_data, e)) {
-        closure->do_klass(e);
-      }
-    }
-  }
-}
-
-
 //   Just the classes from defining class loaders
 void Dictionary::classes_do(void f(Klass*)) {
   for (int index = 0; index < table_size(); index++) {
     for (DictionaryEntry* probe = bucket(index);
                           probe != NULL;

@@ -329,24 +317,10 @@
   // Only the protection domain oops contain references into the heap. Iterate
   // over all of them.
   _pd_cache_table->oops_do(f);
 }
 
-void Dictionary::methods_do(void f(Method*)) {
-  for (int index = 0; index < table_size(); index++) {
-    for (DictionaryEntry* probe = bucket(index);
-                          probe != NULL;
-                          probe = probe->next()) {
-      Klass* k = probe->klass();
-      if (probe->loader_data() == k->class_loader_data()) {
-        // only take klass is we have the entry with the defining class loader
-        InstanceKlass::cast(k)->methods_do(f);
-      }
-    }
-  }
-}
-
 void Dictionary::unlink(BoolObjectClosure* is_alive) {
   // Only the protection domain cache table may contain references to the heap
   // that need to be unlinked.
   _pd_cache_table->unlink(is_alive);
 }

@@ -649,29 +623,10 @@
   ProtectionDomainCacheEntry* p = new_entry(hash, protection_domain);
   Hashtable<oop, mtClass>::add_entry(index, p);
   return p;
 }
 
-void ProtectionDomainCacheTable::free(ProtectionDomainCacheEntry* to_delete) {
-  unsigned int hash = compute_hash(Handle(Thread::current(), to_delete->protection_domain()));
-  int index = hash_to_index(hash);
-
-  ProtectionDomainCacheEntry** p = bucket_addr(index);
-  ProtectionDomainCacheEntry* entry = bucket(index);
-  while (true) {
-    assert(entry != NULL, "sanity");
-
-    if (entry == to_delete) {
-      *p = entry->next();
-      Hashtable<oop, mtClass>::free_entry(entry);
-      break;
-    } else {
-      p = entry->next_addr();
-      entry = *p;
-    }
-  }
-}
 
 SymbolPropertyTable::SymbolPropertyTable(int table_size)
   : Hashtable<Symbol*, mtSymbol>(table_size, sizeof(SymbolPropertyEntry))
 {
 }
< prev index next >