< prev index next >
src/hotspot/share/classfile/systemDictionaryShared.cpp
Print this page
@@ -904,19 +904,14 @@
SystemDictionary::is_platform_class_loader(class_loader())) {
// Do nothing for the BUILTIN loaders.
return NULL;
}
- const RunTimeSharedClassInfo* record = find_record(&_unregistered_dictionary, class_name);
- if (record == NULL) {
- if (DynamicArchive::is_mapped()) {
- record = find_record(&_dynamic_unregistered_dictionary, class_name);
- }
+ const RunTimeSharedClassInfo* record = find_record(&_unregistered_dictionary, &_dynamic_unregistered_dictionary, class_name);
if (record == NULL) {
return NULL;
}
- }
int clsfile_size = cfs->length();
int clsfile_crc32 = ClassLoader::crc32(0, (const char*)cfs->buffer(), cfs->length());
if (!record->matches(clsfile_size, clsfile_crc32)) {
@@ -1411,33 +1406,38 @@
_dynamic_unregistered_dictionary.serialize_header(soc);
}
}
const RunTimeSharedClassInfo*
-SystemDictionaryShared::find_record(RunTimeSharedDictionary* dict, Symbol* name) {
- if (UseSharedSpaces) {
- unsigned int hash = primitive_hash<Symbol*>(name);
- return dict->lookup(name, hash, 0);
- } else {
+SystemDictionaryShared::find_record(RunTimeSharedDictionary* static_dict, RunTimeSharedDictionary* dynamic_dict, Symbol* name) {
+ if (!UseSharedSpaces || !name->is_shared()) {
+ // The names of all shared classes must also be a shared Symbol.
return NULL;
}
-}
-InstanceKlass* SystemDictionaryShared::find_builtin_class(Symbol* name) {
- const RunTimeSharedClassInfo* record = find_record(&_builtin_dictionary, name);
- if (record) {
- return record->_klass;
+ unsigned int hash = primitive_hash<Symbol*>(name);
+ const RunTimeSharedClassInfo* record = NULL;
+ if (!MetaspaceShared::is_shared_dynamic(name)) {
+ // The names of all shared classes in the static dict must also be in the
+ // static archive
+ record = static_dict->lookup(name, hash, 0);
}
- if (DynamicArchive::is_mapped()) {
- record = find_record(&_dynamic_builtin_dictionary, name);
- if (record) {
- return record->_klass;
- }
+ if (record == NULL && DynamicArchive::is_mapped()) {
+ record = dynamic_dict->lookup(name, hash, 0);
}
+ return record;
+}
+
+InstanceKlass* SystemDictionaryShared::find_builtin_class(Symbol* name) {
+ const RunTimeSharedClassInfo* record = find_record(&_builtin_dictionary, &_dynamic_builtin_dictionary, name);
+ if (record != NULL) {
+ return record->_klass;
+ } else {
return NULL;
+ }
}
void SystemDictionaryShared::update_shared_entry(InstanceKlass* k, int id) {
assert(DumpSharedSpaces, "supported only when dumping");
DumpTimeSharedClassInfo* info = find_or_allocate_info_for(k);
< prev index next >