comparison src/share/vm/classfile/systemDictionary.cpp @ 875:6a93908f268f

6857194: Add hotspot perf counters to aid class loading performance measurement Summary: Add new jvmstat counters to measure detailed class loading time Reviewed-by: acorn, kamg
author mchung
date Fri, 10 Jul 2009 11:10:00 -0700
parents be93aad57795
children ad6585fd4087 148e5441d916
comparison
equal deleted inserted replaced
812:85d0690f7d12 875:6a93908f268f
1304 1304
1305 1305
1306 instanceKlassHandle SystemDictionary::load_instance_class(symbolHandle class_name, Handle class_loader, TRAPS) { 1306 instanceKlassHandle SystemDictionary::load_instance_class(symbolHandle class_name, Handle class_loader, TRAPS) {
1307 instanceKlassHandle nh = instanceKlassHandle(); // null Handle 1307 instanceKlassHandle nh = instanceKlassHandle(); // null Handle
1308 if (class_loader.is_null()) { 1308 if (class_loader.is_null()) {
1309
1309 // Search the shared system dictionary for classes preloaded into the 1310 // Search the shared system dictionary for classes preloaded into the
1310 // shared spaces. 1311 // shared spaces.
1311 instanceKlassHandle k; 1312 instanceKlassHandle k;
1312 k = load_shared_class(class_name, class_loader, THREAD); 1313 {
1314 PerfTraceTime vmtimer(ClassLoader::perf_shared_classload_time());
1315 k = load_shared_class(class_name, class_loader, THREAD);
1316 }
1313 1317
1314 if (k.is_null()) { 1318 if (k.is_null()) {
1315 // Use VM class loader 1319 // Use VM class loader
1320 PerfTraceTime vmtimer(ClassLoader::perf_sys_classload_time());
1316 k = ClassLoader::load_classfile(class_name, CHECK_(nh)); 1321 k = ClassLoader::load_classfile(class_name, CHECK_(nh));
1317 } 1322 }
1318 1323
1319 #ifdef KERNEL 1324 #ifdef KERNEL
1320 // If the VM class loader has failed to load the class, call the 1325 // If the VM class loader has failed to load the class, call the
1331 } 1336 }
1332 return k; 1337 return k;
1333 } else { 1338 } else {
1334 // Use user specified class loader to load class. Call loadClass operation on class_loader. 1339 // Use user specified class loader to load class. Call loadClass operation on class_loader.
1335 ResourceMark rm(THREAD); 1340 ResourceMark rm(THREAD);
1341
1342 assert(THREAD->is_Java_thread(), "must be a JavaThread");
1343 JavaThread* jt = (JavaThread*) THREAD;
1344
1345 PerfClassTraceTime vmtimer(ClassLoader::perf_app_classload_time(),
1346 ClassLoader::perf_app_classload_selftime(),
1347 ClassLoader::perf_app_classload_count(),
1348 jt->get_thread_stat()->perf_recursion_counts_addr(),
1349 jt->get_thread_stat()->perf_timers_addr(),
1350 PerfClassTraceTime::CLASS_LOAD);
1336 1351
1337 Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nh)); 1352 Handle s = java_lang_String::create_from_symbol(class_name, CHECK_(nh));
1338 // Translate to external class name format, i.e., convert '/' chars to '.' 1353 // Translate to external class name format, i.e., convert '/' chars to '.'
1339 Handle string = java_lang_String::externalize_classname(s, CHECK_(nh)); 1354 Handle string = java_lang_String::externalize_classname(s, CHECK_(nh));
1340 1355