src/share/vm/classfile/systemDictionary.cpp

Print this page




1226     // on a custom class loader lock.
1227 
1228     ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
1229     {
1230       Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1231       check_loader_lock_contention(lockObject, THREAD);
1232       ObjectLocker ol(lockObject, THREAD, true);
1233       ik->restore_unshareable_info(loader_data, protection_domain, CHECK_(nh));
1234     }
1235 
1236     if (TraceClassLoading) {
1237       ResourceMark rm;
1238       tty->print("[Loaded %s", ik->external_name());
1239       tty->print(" from shared objects file");
1240       if (class_loader.not_null()) {
1241         tty->print(" by %s", loader_data->loader_name());
1242       }
1243       tty->print_cr("]");
1244     }
1245 
1246 #if INCLUDE_CDS
1247     if (DumpLoadedClassList != NULL && classlist_file->is_open()) {
1248       // Only dump the classes that can be stored into CDS archive
1249       if (SystemDictionaryShared::is_sharing_possible(loader_data)) {
1250         ResourceMark rm(THREAD);
1251         classlist_file->print_cr("%s", ik->name()->as_C_string());
1252         classlist_file->flush();
1253       }
1254     }
1255 #endif
1256 
1257     // notify a class loaded from shared object
1258     ClassLoadingService::notify_class_loaded(InstanceKlass::cast(ik()),
1259                                              true /* shared class */);
1260   }
1261   return ik;
1262 }
1263 #endif
1264 
1265 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
1266   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1267   if (class_loader.is_null()) {
1268 
1269     // Search the shared system dictionary for classes preloaded into the
1270     // shared spaces.
1271     instanceKlassHandle k;
1272     {
1273 #if INCLUDE_CDS
1274       PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
1275       k = load_shared_class(class_name, class_loader, THREAD);
1276 #endif
1277     }
1278 
1279     if (k.is_null()) {
1280       // Use VM class loader
1281       PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
1282       k = ClassLoader::load_classfile(class_name, CHECK_(nh));
1283     }




1226     // on a custom class loader lock.
1227 
1228     ClassLoaderData* loader_data = ClassLoaderData::class_loader_data(class_loader());
1229     {
1230       Handle lockObject = compute_loader_lock_object(class_loader, THREAD);
1231       check_loader_lock_contention(lockObject, THREAD);
1232       ObjectLocker ol(lockObject, THREAD, true);
1233       ik->restore_unshareable_info(loader_data, protection_domain, CHECK_(nh));
1234     }
1235 
1236     if (TraceClassLoading) {
1237       ResourceMark rm;
1238       tty->print("[Loaded %s", ik->external_name());
1239       tty->print(" from shared objects file");
1240       if (class_loader.not_null()) {
1241         tty->print(" by %s", loader_data->loader_name());
1242       }
1243       tty->print_cr("]");
1244     }
1245 

1246     if (DumpLoadedClassList != NULL && classlist_file->is_open()) {
1247       // Only dump the classes that can be stored into CDS archive
1248       if (SystemDictionaryShared::is_sharing_possible(loader_data)) {
1249         ResourceMark rm(THREAD);
1250         classlist_file->print_cr("%s", ik->name()->as_C_string());
1251         classlist_file->flush();
1252       }
1253     }

1254 
1255     // notify a class loaded from shared object
1256     ClassLoadingService::notify_class_loaded(InstanceKlass::cast(ik()),
1257                                              true /* shared class */);
1258   }
1259   return ik;
1260 }
1261 #endif // INCLUDE_CDS
1262 
1263 instanceKlassHandle SystemDictionary::load_instance_class(Symbol* class_name, Handle class_loader, TRAPS) {
1264   instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1265   if (class_loader.is_null()) {
1266 
1267     // Search the shared system dictionary for classes preloaded into the
1268     // shared spaces.
1269     instanceKlassHandle k;
1270     {
1271 #if INCLUDE_CDS
1272       PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
1273       k = load_shared_class(class_name, class_loader, THREAD);
1274 #endif
1275     }
1276 
1277     if (k.is_null()) {
1278       // Use VM class loader
1279       PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
1280       k = ClassLoader::load_classfile(class_name, CHECK_(nh));
1281     }