src/share/vm/classfile/dictionary.cpp
Print this page
rev 9227 : [mq] cds
@@ -21,33 +21,42 @@
* questions.
*
*/
#include "precompiled.hpp"
+#include "classfile/sharedClassUtil.hpp"
#include "classfile/dictionary.hpp"
#include "classfile/systemDictionary.hpp"
+#include "classfile/systemDictionaryShared.hpp"
#include "memory/iterator.hpp"
#include "oops/oop.inline.hpp"
#include "prims/jvmtiRedefineClassesTrace.hpp"
#include "runtime/orderAccess.inline.hpp"
#include "utilities/hashtable.inline.hpp"
DictionaryEntry* Dictionary::_current_class_entry = NULL;
int Dictionary::_current_class_index = 0;
+size_t Dictionary::entry_size() {
+ if (DumpSharedSpaces) {
+ return SystemDictionaryShared::dictionary_entry_size();
+ } else {
+ return sizeof(DictionaryEntry);
+ }
+}
Dictionary::Dictionary(int table_size)
- : TwoOopHashtable<Klass*, mtClass>(table_size, sizeof(DictionaryEntry)) {
+ : TwoOopHashtable<Klass*, mtClass>(table_size, (int)entry_size()) {
_current_class_index = 0;
_current_class_entry = NULL;
_pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize);
};
Dictionary::Dictionary(int table_size, HashtableBucket<mtClass>* t,
int number_of_entries)
- : TwoOopHashtable<Klass*, mtClass>(table_size, sizeof(DictionaryEntry), t, number_of_entries) {
+ : TwoOopHashtable<Klass*, mtClass>(table_size, (int)entry_size(), t, number_of_entries) {
_current_class_index = 0;
_current_class_entry = NULL;
_pd_cache_table = new ProtectionDomainCacheTable(defaultProtectionDomainCacheSize);
};
@@ -59,10 +68,13 @@
ClassLoaderData* loader_data) {
DictionaryEntry* entry = (DictionaryEntry*)Hashtable<Klass*, mtClass>::new_entry(hash, klass);
entry->set_loader_data(loader_data);
entry->set_pd_set(NULL);
assert(klass->is_instance_klass(), "Must be");
+ if (DumpSharedSpaces) {
+ SystemDictionaryShared::init_shared_dictionary_entry(klass, entry);
+ }
return entry;
}
void Dictionary::free_entry(DictionaryEntry* entry) {