|
78 | 78 | #include "utilities/classpathStream.hpp" |
79 | 79 | #include "utilities/events.hpp" |
80 | 80 | #include "utilities/macros.hpp" |
| 81 | +#include "utilities/ostream.hpp" |
81 | 82 | #include "utilities/utf8.hpp" |
82 | 83 |
|
83 | 84 | // Entry point in java.dll for path canonicalization |
@@ -118,9 +119,40 @@ PerfCounter* ClassLoader::_perf_define_appclass_time = nullptr; |
118 | 119 | PerfCounter* ClassLoader::_perf_define_appclass_selftime = nullptr; |
119 | 120 | PerfCounter* ClassLoader::_perf_app_classfile_bytes_read = nullptr; |
120 | 121 | PerfCounter* ClassLoader::_perf_sys_classfile_bytes_read = nullptr; |
| 122 | +PerfCounter* ClassLoader::_perf_ik_link_methods_time = nullptr; |
| 123 | +PerfCounter* ClassLoader::_perf_method_adapters_time = nullptr; |
| 124 | +PerfCounter* ClassLoader::_perf_ik_link_methods_count = nullptr; |
| 125 | +PerfCounter* ClassLoader::_perf_method_adapters_count = nullptr; |
121 | 126 | PerfCounter* ClassLoader::_unsafe_defineClassCallCounter = nullptr; |
122 | 127 | PerfCounter* ClassLoader::_perf_secondary_hash_time = nullptr; |
123 | 128 |
|
| 129 | +PerfCounter* ClassLoader::_perf_resolve_indy_time = nullptr; |
| 130 | +PerfCounter* ClassLoader::_perf_resolve_invokehandle_time = nullptr; |
| 131 | +PerfCounter* ClassLoader::_perf_resolve_mh_time = nullptr; |
| 132 | +PerfCounter* ClassLoader::_perf_resolve_mt_time = nullptr; |
| 133 | + |
| 134 | +PerfCounter* ClassLoader::_perf_resolve_indy_count = nullptr; |
| 135 | +PerfCounter* ClassLoader::_perf_resolve_invokehandle_count = nullptr; |
| 136 | +PerfCounter* ClassLoader::_perf_resolve_mh_count = nullptr; |
| 137 | +PerfCounter* ClassLoader::_perf_resolve_mt_count = nullptr; |
| 138 | + |
| 139 | +void ClassLoader::print_counters(outputStream *st) { |
| 140 | + // The counters are only active if the logging is enabled, but |
| 141 | + // we print to the passed in outputStream as requested. |
| 142 | + if (log_is_enabled(Info, perf, class, link)) { |
| 143 | + st->print_cr("ClassLoader:"); |
| 144 | + st->print_cr(" clinit: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", ClassLoader::class_init_time_ms(), ClassLoader::class_init_count()); |
| 145 | + st->print_cr(" link methods: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_ik_link_methods_time->get_value()) , _perf_ik_link_methods_count->get_value()); |
| 146 | + st->print_cr(" method adapters: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_method_adapters_time->get_value()) , _perf_method_adapters_count->get_value()); |
| 147 | + st->print_cr(" resolve..."); |
| 148 | + st->print_cr(" invokedynamic: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_resolve_indy_time->get_value()) , _perf_resolve_indy_count->get_value()); |
| 149 | + st->print_cr(" invokehandle: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_resolve_invokehandle_time->get_value()) , _perf_resolve_invokehandle_count->get_value()); |
| 150 | + st->print_cr(" CP_MethodHandle: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_resolve_mh_time->get_value()) , _perf_resolve_mh_count->get_value()); |
| 151 | + st->print_cr(" CP_MethodType: " JLONG_FORMAT "ms / " JLONG_FORMAT " events", Management::ticks_to_ms(_perf_resolve_mt_time->get_value()) , _perf_resolve_mt_count->get_value()); |
| 152 | + st->cr(); |
| 153 | + } |
| 154 | +} |
| 155 | + |
124 | 156 | GrowableArray<ModuleClassPathList*>* ClassLoader::_patch_mod_entries = nullptr; |
125 | 157 | GrowableArray<ModuleClassPathList*>* ClassLoader::_exploded_entries = nullptr; |
126 | 158 | ClassPathEntry* ClassLoader::_jrt_entry = nullptr; |
@@ -1336,9 +1368,25 @@ void ClassLoader::initialize(TRAPS) { |
1336 | 1368 | NEWPERFTICKCOUNTER(_perf_define_appclass_selftime, SUN_CLS, "defineAppClassTime.self"); |
1337 | 1369 | NEWPERFBYTECOUNTER(_perf_app_classfile_bytes_read, SUN_CLS, "appClassBytes"); |
1338 | 1370 | NEWPERFBYTECOUNTER(_perf_sys_classfile_bytes_read, SUN_CLS, "sysClassBytes"); |
1339 | | - |
1340 | 1371 | NEWPERFEVENTCOUNTER(_unsafe_defineClassCallCounter, SUN_CLS, "unsafeDefineClassCalls"); |
1341 | 1372 | NEWPERFTICKCOUNTER(_perf_secondary_hash_time, SUN_CLS, "secondarySuperHashTime"); |
| 1373 | + |
| 1374 | + if (log_is_enabled(Info, perf, class, link)) { |
| 1375 | + NEWPERFTICKCOUNTER(_perf_ik_link_methods_time, SUN_CLS, "linkMethodsTime"); |
| 1376 | + NEWPERFTICKCOUNTER(_perf_method_adapters_time, SUN_CLS, "makeAdaptersTime"); |
| 1377 | + NEWPERFEVENTCOUNTER(_perf_ik_link_methods_count, SUN_CLS, "linkMethodsCount"); |
| 1378 | + NEWPERFEVENTCOUNTER(_perf_method_adapters_count, SUN_CLS, "makeAdaptersCount"); |
| 1379 | + |
| 1380 | + NEWPERFTICKCOUNTER(_perf_resolve_indy_time, SUN_CLS, "resolve_invokedynamic_time"); |
| 1381 | + NEWPERFTICKCOUNTER(_perf_resolve_invokehandle_time, SUN_CLS, "resolve_invokehandle_time"); |
| 1382 | + NEWPERFTICKCOUNTER(_perf_resolve_mh_time, SUN_CLS, "resolve_MethodHandle_time"); |
| 1383 | + NEWPERFTICKCOUNTER(_perf_resolve_mt_time, SUN_CLS, "resolve_MethodType_time"); |
| 1384 | + |
| 1385 | + NEWPERFEVENTCOUNTER(_perf_resolve_indy_count, SUN_CLS, "resolve_invokedynamic_count"); |
| 1386 | + NEWPERFEVENTCOUNTER(_perf_resolve_invokehandle_count, SUN_CLS, "resolve_invokehandle_count"); |
| 1387 | + NEWPERFEVENTCOUNTER(_perf_resolve_mh_count, SUN_CLS, "resolve_MethodHandle_count"); |
| 1388 | + NEWPERFEVENTCOUNTER(_perf_resolve_mt_count, SUN_CLS, "resolve_MethodType_count"); |
| 1389 | + } |
1342 | 1390 | } |
1343 | 1391 |
|
1344 | 1392 | // lookup java library entry points |
|
0 commit comments