< prev index next >

src/hotspot/share/classfile/classLoader.cpp

Print this page

  51 #include "logging/logTag.hpp"
  52 #include "memory/allocation.inline.hpp"
  53 #include "memory/oopFactory.hpp"
  54 #include "memory/resourceArea.hpp"
  55 #include "memory/universe.hpp"
  56 #include "oops/instanceKlass.hpp"
  57 #include "oops/instanceRefKlass.hpp"
  58 #include "oops/klass.inline.hpp"
  59 #include "oops/method.inline.hpp"
  60 #include "oops/objArrayOop.inline.hpp"
  61 #include "oops/oop.inline.hpp"
  62 #include "oops/symbol.hpp"
  63 #include "prims/jvm_misc.hpp"
  64 #include "runtime/arguments.hpp"
  65 #include "runtime/handles.inline.hpp"
  66 #include "runtime/init.hpp"
  67 #include "runtime/interfaceSupport.inline.hpp"
  68 #include "runtime/java.hpp"
  69 #include "runtime/javaCalls.hpp"
  70 #include "runtime/os.hpp"
  71 #include "runtime/perfData.hpp"
  72 #include "runtime/timer.hpp"
  73 #include "runtime/vm_version.hpp"
  74 #include "services/management.hpp"
  75 #include "services/threadService.hpp"
  76 #include "utilities/checkedCast.hpp"
  77 #include "utilities/classpathStream.hpp"
  78 #include "utilities/events.hpp"
  79 #include "utilities/macros.hpp"
  80 #include "utilities/ostream.hpp"
  81 #include "utilities/utf8.hpp"
  82 
  83 #include <stdlib.h>
  84 #include <ctype.h>
  85 
  86 // Entry point in java.dll for path canonicalization
  87 
  88 typedef int (*canonicalize_fn_t)(const char *orig, char *out, int len);
  89 
  90 static canonicalize_fn_t CanonicalizeEntry  = nullptr;
  91 
  92 // Entry points for jimage.dll for loading jimage file entries
  93 
  94 static JImageOpen_t                    JImageOpen             = nullptr;
  95 static JImageClose_t                   JImageClose            = nullptr;
  96 static JImageFindResource_t            JImageFindResource     = nullptr;
  97 static JImageGetResource_t             JImageGetResource      = nullptr;
  98 
  99 // JimageFile pointer, or null if exploded JDK build.
 100 static JImageFile*                     JImage_file            = nullptr;
 101 
 102 // Globals
 103 
 104 PerfCounter*    ClassLoader::_perf_accumulated_time = nullptr;
 105 PerfCounter*    ClassLoader::_perf_classes_inited = nullptr;
 106 PerfCounter*    ClassLoader::_perf_class_init_time = nullptr;
 107 PerfCounter*    ClassLoader::_perf_class_init_selftime = nullptr;

 108 PerfCounter*    ClassLoader::_perf_classes_verified = nullptr;
 109 PerfCounter*    ClassLoader::_perf_class_verify_time = nullptr;
 110 PerfCounter*    ClassLoader::_perf_class_verify_selftime = nullptr;
 111 PerfCounter*    ClassLoader::_perf_classes_linked = nullptr;
 112 PerfCounter*    ClassLoader::_perf_class_link_time = nullptr;
 113 PerfCounter*    ClassLoader::_perf_class_link_selftime = nullptr;
 114 PerfCounter*    ClassLoader::_perf_shared_classload_time = nullptr;
 115 PerfCounter*    ClassLoader::_perf_sys_classload_time = nullptr;
 116 PerfCounter*    ClassLoader::_perf_app_classload_time = nullptr;
 117 PerfCounter*    ClassLoader::_perf_app_classload_selftime = nullptr;
 118 PerfCounter*    ClassLoader::_perf_app_classload_count = nullptr;
 119 PerfCounter*    ClassLoader::_perf_define_appclasses = nullptr;
 120 PerfCounter*    ClassLoader::_perf_define_appclass_time = nullptr;
 121 PerfCounter*    ClassLoader::_perf_define_appclass_selftime = nullptr;
 122 PerfCounter*    ClassLoader::_perf_app_classfile_bytes_read = nullptr;
 123 PerfCounter*    ClassLoader::_perf_sys_classfile_bytes_read = nullptr;





 124 PerfCounter*    ClassLoader::_perf_ik_link_methods_time = nullptr;
 125 PerfCounter*    ClassLoader::_perf_method_adapters_time = nullptr;
 126 PerfCounter*    ClassLoader::_perf_ik_link_methods_count = nullptr;
 127 PerfCounter*    ClassLoader::_perf_method_adapters_count = nullptr;
 128 PerfCounter*    ClassLoader::_unsafe_defineClassCallCounter = nullptr;
 129 PerfCounter*    ClassLoader::_perf_secondary_hash_time = nullptr;
 130 
 131 PerfCounter*    ClassLoader::_perf_resolve_indy_time = nullptr;
 132 PerfCounter*    ClassLoader::_perf_resolve_invokehandle_time = nullptr;
 133 PerfCounter*    ClassLoader::_perf_resolve_mh_time = nullptr;
 134 PerfCounter*    ClassLoader::_perf_resolve_mt_time = nullptr;
 135 
 136 PerfCounter*    ClassLoader::_perf_resolve_indy_count = nullptr;
 137 PerfCounter*    ClassLoader::_perf_resolve_invokehandle_count = nullptr;
 138 PerfCounter*    ClassLoader::_perf_resolve_mh_count = nullptr;
 139 PerfCounter*    ClassLoader::_perf_resolve_mt_count = nullptr;
 140 
 141 void ClassLoader::print_counters(outputStream *st) {
 142   st->print_cr("ClassLoader:");
 143   st->print_cr("  clinit:               " JLONG_FORMAT "ms / " JLONG_FORMAT " events", ClassLoader::class_init_time_ms(), ClassLoader::class_init_count());
 144   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());
 145   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());






 146   st->print_cr("  resolve...");
 147   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());
 148   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());
 149   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());
 150   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());
 151   st->cr();











 152 }
 153 
 154 GrowableArray<ModuleClassPathList*>* ClassLoader::_patch_mod_entries = nullptr;
 155 GrowableArray<ModuleClassPathList*>* ClassLoader::_exploded_entries = nullptr;
 156 ClassPathEntry* ClassLoader::_jrt_entry = nullptr;
 157 
 158 ClassPathEntry* volatile ClassLoader::_first_append_entry_list = nullptr;
 159 ClassPathEntry* volatile ClassLoader::_last_append_entry  = nullptr;
 160 
 161 // helper routines
 162 #if INCLUDE_CDS
 163 static bool string_starts_with(const char* str, const char* str_to_find) {
 164   size_t str_len = strlen(str);
 165   size_t str_to_find_len = strlen(str_to_find);
 166   if (str_to_find_len > str_len) {
 167     return false;
 168   }
 169   return (strncmp(str, str_to_find, str_to_find_len) == 0);
 170 }
 171 #endif

1311 #endif // INCLUDE_CDS
1312 
1313 // Initialize the class loader's access to methods in libzip.  Parse and
1314 // process the boot classpath into a list ClassPathEntry objects.  Once
1315 // this list has been created, it must not change order (see class PackageInfo)
1316 // it can be appended to and is by jvmti.
1317 
1318 void ClassLoader::initialize(TRAPS) {
1319   if (UsePerfData) {
1320     // jvmstat performance counters
1321     NEWPERFTICKCOUNTER(_perf_accumulated_time, SUN_CLS, "time");
1322     NEWPERFTICKCOUNTER(_perf_class_init_time, SUN_CLS, "classInitTime");
1323     NEWPERFTICKCOUNTER(_perf_class_init_selftime, SUN_CLS, "classInitTime.self");
1324     NEWPERFTICKCOUNTER(_perf_class_verify_time, SUN_CLS, "classVerifyTime");
1325     NEWPERFTICKCOUNTER(_perf_class_verify_selftime, SUN_CLS, "classVerifyTime.self");
1326     NEWPERFTICKCOUNTER(_perf_class_link_time, SUN_CLS, "classLinkedTime");
1327     NEWPERFTICKCOUNTER(_perf_class_link_selftime, SUN_CLS, "classLinkedTime.self");
1328     NEWPERFEVENTCOUNTER(_perf_classes_inited, SUN_CLS, "initializedClasses");
1329     NEWPERFEVENTCOUNTER(_perf_classes_linked, SUN_CLS, "linkedClasses");
1330     NEWPERFEVENTCOUNTER(_perf_classes_verified, SUN_CLS, "verifiedClasses");

1331 
1332     NEWPERFTICKCOUNTER(_perf_shared_classload_time, SUN_CLS, "sharedClassLoadTime");
1333     NEWPERFTICKCOUNTER(_perf_sys_classload_time, SUN_CLS, "sysClassLoadTime");
1334     NEWPERFTICKCOUNTER(_perf_app_classload_time, SUN_CLS, "appClassLoadTime");
1335     NEWPERFTICKCOUNTER(_perf_app_classload_selftime, SUN_CLS, "appClassLoadTime.self");
1336     NEWPERFEVENTCOUNTER(_perf_app_classload_count, SUN_CLS, "appClassLoadCount");
1337     NEWPERFTICKCOUNTER(_perf_define_appclasses, SUN_CLS, "defineAppClasses");
1338     NEWPERFTICKCOUNTER(_perf_define_appclass_time, SUN_CLS, "defineAppClassTime");
1339     NEWPERFTICKCOUNTER(_perf_define_appclass_selftime, SUN_CLS, "defineAppClassTime.self");
1340     NEWPERFBYTECOUNTER(_perf_app_classfile_bytes_read, SUN_CLS, "appClassBytes");
1341     NEWPERFBYTECOUNTER(_perf_sys_classfile_bytes_read, SUN_CLS, "sysClassBytes");
1342     NEWPERFEVENTCOUNTER(_unsafe_defineClassCallCounter, SUN_CLS, "unsafeDefineClassCalls");
1343     NEWPERFTICKCOUNTER(_perf_secondary_hash_time, SUN_CLS, "secondarySuperHashTime");
1344 
1345     if (log_is_enabled(Info, perf, class, link)) {






1346       NEWPERFTICKCOUNTER(_perf_ik_link_methods_time, SUN_CLS, "linkMethodsTime");
1347       NEWPERFTICKCOUNTER(_perf_method_adapters_time, SUN_CLS, "makeAdaptersTime");
1348       NEWPERFEVENTCOUNTER(_perf_ik_link_methods_count, SUN_CLS, "linkMethodsCount");
1349       NEWPERFEVENTCOUNTER(_perf_method_adapters_count, SUN_CLS, "makeAdaptersCount");
1350 
1351       NEWPERFTICKCOUNTER(_perf_resolve_indy_time, SUN_CLS, "resolve_invokedynamic_time");
1352       NEWPERFTICKCOUNTER(_perf_resolve_invokehandle_time, SUN_CLS, "resolve_invokehandle_time");
1353       NEWPERFTICKCOUNTER(_perf_resolve_mh_time, SUN_CLS, "resolve_MethodHandle_time");
1354       NEWPERFTICKCOUNTER(_perf_resolve_mt_time, SUN_CLS, "resolve_MethodType_time");
1355 
1356       NEWPERFEVENTCOUNTER(_perf_resolve_indy_count, SUN_CLS, "resolve_invokedynamic_count");
1357       NEWPERFEVENTCOUNTER(_perf_resolve_invokehandle_count, SUN_CLS, "resolve_invokehandle_count");
1358       NEWPERFEVENTCOUNTER(_perf_resolve_mh_count, SUN_CLS, "resolve_MethodHandle_count");
1359       NEWPERFEVENTCOUNTER(_perf_resolve_mt_count, SUN_CLS, "resolve_MethodType_count");
1360     }
1361   }
1362 
1363   // lookup java library entry points
1364   load_java_library();
1365   // jimage library entry points are loaded below, in lookup_vm_options
1366   setup_bootstrap_search_path(THREAD);
1367 }
1368 
1369 static char* lookup_vm_resource(JImageFile *jimage, const char *jimage_version, const char *path) {
1370   jlong size;
1371   JImageLocationRef location = (*JImageFindResource)(jimage, "java.base", jimage_version, path, &size);
1372   if (location == 0)
1373     return nullptr;
1374   char *val = NEW_C_HEAP_ARRAY(char, size+1, mtClass);

1399 
1400 bool ClassLoader::is_module_observable(const char* module_name) {
1401   assert(JImageOpen != nullptr, "jimage library should have been opened");
1402   if (JImage_file == nullptr) {
1403     struct stat st;
1404     const char *path = get_exploded_module_path(module_name, true);
1405     bool res = os::stat(path, &st) == 0;
1406     FREE_C_HEAP_ARRAY(char, path);
1407     return res;
1408   }
1409   jlong size;
1410   const char *jimage_version = get_jimage_version_string();
1411   return (*JImageFindResource)(JImage_file, module_name, jimage_version, "module-info.class", &size) != 0;
1412 }
1413 
1414 jlong ClassLoader::classloader_time_ms() {
1415   return UsePerfData ?
1416     Management::ticks_to_ms(_perf_accumulated_time->get_value()) : -1;
1417 }
1418 




1419 jlong ClassLoader::class_init_count() {
1420   return UsePerfData ? _perf_classes_inited->get_value() : -1;
1421 }
1422 
1423 jlong ClassLoader::class_init_time_ms() {
1424   return UsePerfData ?
1425     Management::ticks_to_ms(_perf_class_init_time->get_value()) : -1;
1426 }
1427 
1428 jlong ClassLoader::class_verify_time_ms() {
1429   return UsePerfData ?
1430     Management::ticks_to_ms(_perf_class_verify_time->get_value()) : -1;
1431 }
1432 
1433 jlong ClassLoader::class_link_count() {
1434   return UsePerfData ? _perf_classes_linked->get_value() : -1;
1435 }
1436 
1437 jlong ClassLoader::class_link_time_ms() {
1438   return UsePerfData ?

  51 #include "logging/logTag.hpp"
  52 #include "memory/allocation.inline.hpp"
  53 #include "memory/oopFactory.hpp"
  54 #include "memory/resourceArea.hpp"
  55 #include "memory/universe.hpp"
  56 #include "oops/instanceKlass.hpp"
  57 #include "oops/instanceRefKlass.hpp"
  58 #include "oops/klass.inline.hpp"
  59 #include "oops/method.inline.hpp"
  60 #include "oops/objArrayOop.inline.hpp"
  61 #include "oops/oop.inline.hpp"
  62 #include "oops/symbol.hpp"
  63 #include "prims/jvm_misc.hpp"
  64 #include "runtime/arguments.hpp"
  65 #include "runtime/handles.inline.hpp"
  66 #include "runtime/init.hpp"
  67 #include "runtime/interfaceSupport.inline.hpp"
  68 #include "runtime/java.hpp"
  69 #include "runtime/javaCalls.hpp"
  70 #include "runtime/os.hpp"
  71 #include "runtime/perfData.inline.hpp"
  72 #include "runtime/timer.hpp"
  73 #include "runtime/vm_version.hpp"
  74 #include "services/management.hpp"
  75 #include "services/threadService.hpp"
  76 #include "utilities/checkedCast.hpp"
  77 #include "utilities/classpathStream.hpp"
  78 #include "utilities/events.hpp"
  79 #include "utilities/macros.hpp"
  80 #include "utilities/ostream.hpp"
  81 #include "utilities/utf8.hpp"
  82 
  83 #include <stdlib.h>
  84 #include <ctype.h>
  85 
  86 // Entry point in java.dll for path canonicalization
  87 
  88 typedef int (*canonicalize_fn_t)(const char *orig, char *out, int len);
  89 
  90 static canonicalize_fn_t CanonicalizeEntry  = nullptr;
  91 
  92 // Entry points for jimage.dll for loading jimage file entries
  93 
  94 static JImageOpen_t                    JImageOpen             = nullptr;
  95 static JImageClose_t                   JImageClose            = nullptr;
  96 static JImageFindResource_t            JImageFindResource     = nullptr;
  97 static JImageGetResource_t             JImageGetResource      = nullptr;
  98 
  99 // JimageFile pointer, or null if exploded JDK build.
 100 static JImageFile*                     JImage_file            = nullptr;
 101 
 102 // Globals
 103 
 104 PerfCounter*    ClassLoader::_perf_accumulated_time = nullptr;
 105 PerfCounter*    ClassLoader::_perf_classes_inited = nullptr;
 106 PerfCounter*    ClassLoader::_perf_class_init_time = nullptr;
 107 PerfCounter*    ClassLoader::_perf_class_init_selftime = nullptr;
 108 PerfCounter*    ClassLoader::_perf_class_init_bytecodes_count = nullptr;
 109 PerfCounter*    ClassLoader::_perf_classes_verified = nullptr;
 110 PerfCounter*    ClassLoader::_perf_class_verify_time = nullptr;
 111 PerfCounter*    ClassLoader::_perf_class_verify_selftime = nullptr;
 112 PerfCounter*    ClassLoader::_perf_classes_linked = nullptr;
 113 PerfCounter*    ClassLoader::_perf_class_link_time = nullptr;
 114 PerfCounter*    ClassLoader::_perf_class_link_selftime = nullptr;
 115 PerfCounter*    ClassLoader::_perf_shared_classload_time = nullptr;
 116 PerfCounter*    ClassLoader::_perf_sys_classload_time = nullptr;
 117 PerfCounter*    ClassLoader::_perf_app_classload_time = nullptr;
 118 PerfCounter*    ClassLoader::_perf_app_classload_selftime = nullptr;
 119 PerfCounter*    ClassLoader::_perf_app_classload_count = nullptr;
 120 PerfCounter*    ClassLoader::_perf_define_appclasses = nullptr;
 121 PerfCounter*    ClassLoader::_perf_define_appclass_time = nullptr;
 122 PerfCounter*    ClassLoader::_perf_define_appclass_selftime = nullptr;
 123 PerfCounter*    ClassLoader::_perf_app_classfile_bytes_read = nullptr;
 124 PerfCounter*    ClassLoader::_perf_sys_classfile_bytes_read = nullptr;
 125 PerfCounter*    ClassLoader::_perf_preload_total_time = nullptr;
 126 PerfCounter*    ClassLoader::_perf_preload_time = nullptr;
 127 PerfCounter*    ClassLoader::_perf_prelink_time = nullptr;
 128 PerfCounter*    ClassLoader::_perf_preinit_time = nullptr;
 129 PerfCounter*    ClassLoader::_perf_preresolve_time = nullptr;
 130 PerfCounter*    ClassLoader::_perf_ik_link_methods_time = nullptr;
 131 PerfCounter*    ClassLoader::_perf_method_adapters_time = nullptr;
 132 PerfCounter*    ClassLoader::_perf_ik_link_methods_count = nullptr;
 133 PerfCounter*    ClassLoader::_perf_method_adapters_count = nullptr;
 134 PerfCounter*    ClassLoader::_unsafe_defineClassCallCounter = nullptr;
 135 PerfCounter*    ClassLoader::_perf_secondary_hash_time = nullptr;
 136 
 137 PerfTickCounters*    ClassLoader::_perf_resolve_indy_time = nullptr;
 138 PerfTickCounters*    ClassLoader::_perf_resolve_invokehandle_time = nullptr;
 139 PerfTickCounters*    ClassLoader::_perf_resolve_mh_time = nullptr;
 140 PerfTickCounters*    ClassLoader::_perf_resolve_mt_time = nullptr;
 141 
 142 PerfCounter*    ClassLoader::_perf_resolve_indy_count = nullptr;
 143 PerfCounter*    ClassLoader::_perf_resolve_invokehandle_count = nullptr;
 144 PerfCounter*    ClassLoader::_perf_resolve_mh_count = nullptr;
 145 PerfCounter*    ClassLoader::_perf_resolve_mt_count = nullptr;
 146 
 147 void ClassLoader::print_counters(outputStream *st) {
 148   st->print_cr("ClassLoader:");
 149   st->print_cr(   "  clinit:               " JLONG_FORMAT_W(6) "us / " JLONG_FORMAT " events",
 150                ClassLoader::class_init_time_ms(), ClassLoader::class_init_count());
 151   st->print_cr("  link methods:         " JLONG_FORMAT_W(6) "us / " JLONG_FORMAT " events",
 152                Management::ticks_to_us(_perf_ik_link_methods_time->get_value())   , _perf_ik_link_methods_count->get_value());
 153   st->print_cr("  method adapters:      " JLONG_FORMAT_W(6) "us / " JLONG_FORMAT " events",
 154                Management::ticks_to_us(_perf_method_adapters_time->get_value())   , _perf_method_adapters_count->get_value());
 155   if (CountBytecodes || CountBytecodesPerThread) {
 156     st->print_cr("; executed " JLONG_FORMAT " bytecodes", ClassLoader::class_init_bytecodes_count());
 157   }
 158   st->print_cr("  resolve...");
 159   st->print_cr("    invokedynamic:   " JLONG_FORMAT_W(6) "us (elapsed) " JLONG_FORMAT_W(6) "us (thread) / " JLONG_FORMAT_W(5) " events",
 160                _perf_resolve_indy_time->elapsed_counter_value_us(),
 161                _perf_resolve_indy_time->thread_counter_value_us(),
 162                _perf_resolve_indy_count->get_value());
 163   st->print_cr("    invokehandle:    " JLONG_FORMAT_W(6) "us (elapsed) " JLONG_FORMAT_W(6) "us (thread) / " JLONG_FORMAT_W(5) " events",
 164                _perf_resolve_invokehandle_time->elapsed_counter_value_us(),
 165                _perf_resolve_invokehandle_time->thread_counter_value_us(),
 166                _perf_resolve_invokehandle_count->get_value());
 167   st->print_cr("    CP_MethodHandle: " JLONG_FORMAT_W(6) "us (elapsed) " JLONG_FORMAT_W(6) "us (thread) / " JLONG_FORMAT_W(5) " events",
 168                _perf_resolve_mh_time->elapsed_counter_value_us(),
 169                _perf_resolve_mh_time->thread_counter_value_us(),
 170                _perf_resolve_mh_count->get_value());
 171   st->print_cr("    CP_MethodType:   " JLONG_FORMAT_W(6) "us (elapsed) " JLONG_FORMAT_W(6) "us (thread) / " JLONG_FORMAT_W(5) " events",
 172                _perf_resolve_mt_time->elapsed_counter_value_us(),
 173                _perf_resolve_mt_time->thread_counter_value_us(),
 174                _perf_resolve_mt_count->get_value());
 175 }
 176 
 177 GrowableArray<ModuleClassPathList*>* ClassLoader::_patch_mod_entries = nullptr;
 178 GrowableArray<ModuleClassPathList*>* ClassLoader::_exploded_entries = nullptr;
 179 ClassPathEntry* ClassLoader::_jrt_entry = nullptr;
 180 
 181 ClassPathEntry* volatile ClassLoader::_first_append_entry_list = nullptr;
 182 ClassPathEntry* volatile ClassLoader::_last_append_entry  = nullptr;
 183 
 184 // helper routines
 185 #if INCLUDE_CDS
 186 static bool string_starts_with(const char* str, const char* str_to_find) {
 187   size_t str_len = strlen(str);
 188   size_t str_to_find_len = strlen(str_to_find);
 189   if (str_to_find_len > str_len) {
 190     return false;
 191   }
 192   return (strncmp(str, str_to_find, str_to_find_len) == 0);
 193 }
 194 #endif

1334 #endif // INCLUDE_CDS
1335 
1336 // Initialize the class loader's access to methods in libzip.  Parse and
1337 // process the boot classpath into a list ClassPathEntry objects.  Once
1338 // this list has been created, it must not change order (see class PackageInfo)
1339 // it can be appended to and is by jvmti.
1340 
1341 void ClassLoader::initialize(TRAPS) {
1342   if (UsePerfData) {
1343     // jvmstat performance counters
1344     NEWPERFTICKCOUNTER(_perf_accumulated_time, SUN_CLS, "time");
1345     NEWPERFTICKCOUNTER(_perf_class_init_time, SUN_CLS, "classInitTime");
1346     NEWPERFTICKCOUNTER(_perf_class_init_selftime, SUN_CLS, "classInitTime.self");
1347     NEWPERFTICKCOUNTER(_perf_class_verify_time, SUN_CLS, "classVerifyTime");
1348     NEWPERFTICKCOUNTER(_perf_class_verify_selftime, SUN_CLS, "classVerifyTime.self");
1349     NEWPERFTICKCOUNTER(_perf_class_link_time, SUN_CLS, "classLinkedTime");
1350     NEWPERFTICKCOUNTER(_perf_class_link_selftime, SUN_CLS, "classLinkedTime.self");
1351     NEWPERFEVENTCOUNTER(_perf_classes_inited, SUN_CLS, "initializedClasses");
1352     NEWPERFEVENTCOUNTER(_perf_classes_linked, SUN_CLS, "linkedClasses");
1353     NEWPERFEVENTCOUNTER(_perf_classes_verified, SUN_CLS, "verifiedClasses");
1354     NEWPERFEVENTCOUNTER(_perf_class_init_bytecodes_count, SUN_CLS, "clinitBytecodesCount");
1355 
1356     NEWPERFTICKCOUNTER(_perf_shared_classload_time, SUN_CLS, "sharedClassLoadTime");
1357     NEWPERFTICKCOUNTER(_perf_sys_classload_time, SUN_CLS, "sysClassLoadTime");
1358     NEWPERFTICKCOUNTER(_perf_app_classload_time, SUN_CLS, "appClassLoadTime");
1359     NEWPERFTICKCOUNTER(_perf_app_classload_selftime, SUN_CLS, "appClassLoadTime.self");
1360     NEWPERFEVENTCOUNTER(_perf_app_classload_count, SUN_CLS, "appClassLoadCount");
1361     NEWPERFTICKCOUNTER(_perf_define_appclasses, SUN_CLS, "defineAppClasses");
1362     NEWPERFTICKCOUNTER(_perf_define_appclass_time, SUN_CLS, "defineAppClassTime");
1363     NEWPERFTICKCOUNTER(_perf_define_appclass_selftime, SUN_CLS, "defineAppClassTime.self");
1364     NEWPERFBYTECOUNTER(_perf_app_classfile_bytes_read, SUN_CLS, "appClassBytes");
1365     NEWPERFBYTECOUNTER(_perf_sys_classfile_bytes_read, SUN_CLS, "sysClassBytes");
1366     NEWPERFEVENTCOUNTER(_unsafe_defineClassCallCounter, SUN_CLS, "unsafeDefineClassCalls");
1367     NEWPERFTICKCOUNTER(_perf_secondary_hash_time, SUN_CLS, "secondarySuperHashTime");
1368 
1369     if (log_is_enabled(Info, perf, class, link) || log_is_enabled(Info, init)) {
1370       NEWPERFTICKCOUNTER(_perf_preload_total_time, SUN_CLS, "preloadTotalTime");
1371       NEWPERFTICKCOUNTER(_perf_preload_time, SUN_CLS, "preloadTime");
1372       NEWPERFTICKCOUNTER(_perf_prelink_time, SUN_CLS, "prelinkTime");
1373       NEWPERFTICKCOUNTER(_perf_preinit_time, SUN_CLS, "preinitTime");
1374       NEWPERFTICKCOUNTER(_perf_preresolve_time, SUN_CLS, "preresolveTime");
1375 
1376       NEWPERFTICKCOUNTER(_perf_ik_link_methods_time, SUN_CLS, "linkMethodsTime");
1377       NEWPERFTICKCOUNTER(_perf_method_adapters_time, SUN_CLS, "makeAdaptersTime");
1378       NEWPERFEVENTCOUNTER(_perf_ik_link_methods_count, SUN_CLS, "linkMethodsCount");
1379       NEWPERFEVENTCOUNTER(_perf_method_adapters_count, SUN_CLS, "makeAdaptersCount");
1380 
1381       NEWPERFTICKCOUNTERS(_perf_resolve_indy_time, SUN_CLS, "resolve_invokedynamic_time");
1382       NEWPERFTICKCOUNTERS(_perf_resolve_invokehandle_time, SUN_CLS, "resolve_invokehandle_time");
1383       NEWPERFTICKCOUNTERS(_perf_resolve_mh_time, SUN_CLS, "resolve_MethodHandle_time");
1384       NEWPERFTICKCOUNTERS(_perf_resolve_mt_time, SUN_CLS, "resolve_MethodType_time");
1385 
1386       NEWPERFEVENTCOUNTER(_perf_resolve_indy_count, SUN_CLS, "resolve_invokedynamic_count");
1387       NEWPERFEVENTCOUNTER(_perf_resolve_invokehandle_count, SUN_CLS, "resolve_invokehandle_count");
1388       NEWPERFEVENTCOUNTER(_perf_resolve_mh_count, SUN_CLS, "resolve_MethodHandle_count");
1389       NEWPERFEVENTCOUNTER(_perf_resolve_mt_count, SUN_CLS, "resolve_MethodType_count");
1390     }
1391   }
1392 
1393   // lookup java library entry points
1394   load_java_library();
1395   // jimage library entry points are loaded below, in lookup_vm_options
1396   setup_bootstrap_search_path(THREAD);
1397 }
1398 
1399 static char* lookup_vm_resource(JImageFile *jimage, const char *jimage_version, const char *path) {
1400   jlong size;
1401   JImageLocationRef location = (*JImageFindResource)(jimage, "java.base", jimage_version, path, &size);
1402   if (location == 0)
1403     return nullptr;
1404   char *val = NEW_C_HEAP_ARRAY(char, size+1, mtClass);

1429 
1430 bool ClassLoader::is_module_observable(const char* module_name) {
1431   assert(JImageOpen != nullptr, "jimage library should have been opened");
1432   if (JImage_file == nullptr) {
1433     struct stat st;
1434     const char *path = get_exploded_module_path(module_name, true);
1435     bool res = os::stat(path, &st) == 0;
1436     FREE_C_HEAP_ARRAY(char, path);
1437     return res;
1438   }
1439   jlong size;
1440   const char *jimage_version = get_jimage_version_string();
1441   return (*JImageFindResource)(JImage_file, module_name, jimage_version, "module-info.class", &size) != 0;
1442 }
1443 
1444 jlong ClassLoader::classloader_time_ms() {
1445   return UsePerfData ?
1446     Management::ticks_to_ms(_perf_accumulated_time->get_value()) : -1;
1447 }
1448 
1449 jlong ClassLoader::class_init_bytecodes_count() {
1450   return UsePerfData ? _perf_class_init_bytecodes_count->get_value() : -1;
1451 }
1452 
1453 jlong ClassLoader::class_init_count() {
1454   return UsePerfData ? _perf_classes_inited->get_value() : -1;
1455 }
1456 
1457 jlong ClassLoader::class_init_time_ms() {
1458   return UsePerfData ?
1459     Management::ticks_to_ms(_perf_class_init_time->get_value()) : -1;
1460 }
1461 
1462 jlong ClassLoader::class_verify_time_ms() {
1463   return UsePerfData ?
1464     Management::ticks_to_ms(_perf_class_verify_time->get_value()) : -1;
1465 }
1466 
1467 jlong ClassLoader::class_link_count() {
1468   return UsePerfData ? _perf_classes_linked->get_value() : -1;
1469 }
1470 
1471 jlong ClassLoader::class_link_time_ms() {
1472   return UsePerfData ?
< prev index next >