// do all entries in the placeholder table void PlaceholderTable::entries_do(void f(Symbol*)) { for (int index = 0; index < table_size(); index++) { for (PlaceholderEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { f(probe->klassname()); } } }
void PlaceholderTable::classes_do(KlassClosure* f) { for (int index = 0; index < table_size(); index++) { for (PlaceholderEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { probe->classes_do(f); } } }
// do all entries in the placeholder table void PlaceholderTable::entries_do(void f(symbolOop, oop)) { for (int index = 0; index < table_size(); index++) { for (PlaceholderEntry* probe = bucket(index); probe != NULL; probe = probe->next()) { f(probe->klass(), probe->loader()); } } }
void PlaceholderTable::print() { for (int pindex = 0; pindex < table_size(); pindex++) { for (PlaceholderEntry* probe = bucket(pindex); probe != NULL; probe = probe->next()) { if (Verbose) tty->print("%4d: ", pindex); tty->print(" place holder "); probe->print(); tty->cr(); } } }
void PlaceholderTable::verify() { int element_count = 0; for (int pindex = 0; pindex < table_size(); pindex++) { for (PlaceholderEntry* probe = bucket(pindex); probe != NULL; probe = probe->next()) { probe->verify(); element_count++; // both klasses and place holders count } } guarantee(number_of_entries() == element_count, "Verify of system dictionary failed"); }
// Remove a placeholder object. void PlaceholderTable::remove_entry(int index, unsigned int hash, Symbol* class_name, ClassLoaderData* loader_data) { assert_locked_or_safepoint(SystemDictionary_lock); PlaceholderEntry** p = bucket_addr(index); while (*p) { PlaceholderEntry *probe = *p; if (probe->hash() == hash && probe->equals(class_name, loader_data)) { // Delete entry *p = probe->next(); free_entry(probe); return; } p = probe->next_addr(); } }