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 }
|