Mercurial > hg > truffle
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 |