--- a/hotspot/src/share/vm/classfile/dictionary.cpp Thu Nov 12 14:03:14 2015 +0100
+++ b/hotspot/src/share/vm/classfile/dictionary.cpp Tue Aug 18 11:27:23 2015 -0700
@@ -23,8 +23,10 @@
*/
#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"
@@ -34,9 +36,16 @@
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);
@@ -45,7 +54,7 @@
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);
@@ -61,6 +70,9 @@
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;
}