Top


定義場所(file name)

hotspot/src/share/vm/classfile/classLoader.cpp

名前(function name)

void ClassLoader::initialize() {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(_package_hash_table == NULL, "should have been initialized by now.");
      EXCEPTION_MARK;

  {- -------------------------------------------
  (1) (プロファイル情報取得用の初期化処理) (See: UsePerfData)
      ---------------------------------------- -}

      if (UsePerfData) {
        // jvmstat performance counters
        NEWPERFTICKCOUNTER(_perf_accumulated_time, SUN_CLS, "time");
        NEWPERFTICKCOUNTER(_perf_class_init_time, SUN_CLS, "classInitTime");
        NEWPERFTICKCOUNTER(_perf_class_init_selftime, SUN_CLS, "classInitTime.self");
        NEWPERFTICKCOUNTER(_perf_class_verify_time, SUN_CLS, "classVerifyTime");
        NEWPERFTICKCOUNTER(_perf_class_verify_selftime, SUN_CLS, "classVerifyTime.self");
        NEWPERFTICKCOUNTER(_perf_class_link_time, SUN_CLS, "classLinkedTime");
        NEWPERFTICKCOUNTER(_perf_class_link_selftime, SUN_CLS, "classLinkedTime.self");
        NEWPERFEVENTCOUNTER(_perf_classes_inited, SUN_CLS, "initializedClasses");
        NEWPERFEVENTCOUNTER(_perf_classes_linked, SUN_CLS, "linkedClasses");
        NEWPERFEVENTCOUNTER(_perf_classes_verified, SUN_CLS, "verifiedClasses");

        NEWPERFTICKCOUNTER(_perf_class_parse_time, SUN_CLS, "parseClassTime");
        NEWPERFTICKCOUNTER(_perf_class_parse_selftime, SUN_CLS, "parseClassTime.self");
        NEWPERFTICKCOUNTER(_perf_sys_class_lookup_time, SUN_CLS, "lookupSysClassTime");
        NEWPERFTICKCOUNTER(_perf_shared_classload_time, SUN_CLS, "sharedClassLoadTime");
        NEWPERFTICKCOUNTER(_perf_sys_classload_time, SUN_CLS, "sysClassLoadTime");
        NEWPERFTICKCOUNTER(_perf_app_classload_time, SUN_CLS, "appClassLoadTime");
        NEWPERFTICKCOUNTER(_perf_app_classload_selftime, SUN_CLS, "appClassLoadTime.self");
        NEWPERFEVENTCOUNTER(_perf_app_classload_count, SUN_CLS, "appClassLoadCount");
        NEWPERFTICKCOUNTER(_perf_define_appclasses, SUN_CLS, "defineAppClasses");
        NEWPERFTICKCOUNTER(_perf_define_appclass_time, SUN_CLS, "defineAppClassTime");
        NEWPERFTICKCOUNTER(_perf_define_appclass_selftime, SUN_CLS, "defineAppClassTime.self");
        NEWPERFBYTECOUNTER(_perf_app_classfile_bytes_read, SUN_CLS, "appClassBytes");
        NEWPERFBYTECOUNTER(_perf_sys_classfile_bytes_read, SUN_CLS, "sysClassBytes");


        // The following performance counters are added for measuring the impact
        // of the bug fix of 6365597. They are mainly focused on finding out
        // the behavior of system & user-defined classloader lock, whether
        // ClassLoader.loadClass/findClass is being called synchronized or not.
        // Also two additional counters are created to see whether 'UnsyncloadClass'
        // flag is being set or not and how many times load_instance_class call
        // fails with linkageError etc.
        NEWPERFEVENTCOUNTER(_sync_systemLoaderLockContentionRate, SUN_CLS,
                            "systemLoaderLockContentionRate");
        NEWPERFEVENTCOUNTER(_sync_nonSystemLoaderLockContentionRate, SUN_CLS,
                            "nonSystemLoaderLockContentionRate");
        NEWPERFEVENTCOUNTER(_sync_JVMFindLoadedClassLockFreeCounter, SUN_CLS,
                            "jvmFindLoadedClassNoLockCalls");
        NEWPERFEVENTCOUNTER(_sync_JVMDefineClassLockFreeCounter, SUN_CLS,
                            "jvmDefineClassNoLockCalls");

        NEWPERFEVENTCOUNTER(_sync_JNIDefineClassLockFreeCounter, SUN_CLS,
                            "jniDefineClassNoLockCalls");

        NEWPERFEVENTCOUNTER(_unsafe_defineClassCallCounter, SUN_CLS,
                            "unsafeDefineClassCalls");

        NEWPERFEVENTCOUNTER(_isUnsyncloadClass, SUN_CLS, "isUnsyncloadClassSet");
        NEWPERFEVENTCOUNTER(_load_instance_class_failCounter, SUN_CLS,
                            "loadInstanceClassFailRate");

        // increment the isUnsyncloadClass counter if UnsyncloadClass is set.
        if (UnsyncloadClass) {
          _isUnsyncloadClass->inc();
        }
      }

  {- -------------------------------------------
  (1) libzip をロードする.
      ---------------------------------------- -}

      // lookup zip library entry points
      load_zip_library();

  {- -------------------------------------------
  (1) ClassPathEntry オブジェクトの初期化を行う.
      (system class path (boot class path) に対応する
      ClassPathEntry オブジェクトを生成し, ClassLoader 内に登録する)
      ---------------------------------------- -}

      // initialize search path
      setup_bootstrap_search_path();

  {- -------------------------------------------
  (1) 遅延ロードの必要があれば (= LazyBootClassLoader オプションが指定されていれば)
      MetaIndex の初期化を行っておく.
      ---------------------------------------- -}

      if (LazyBootClassLoader) {
        // set up meta index which makes boot classpath initialization lazier
        setup_meta_index();
      }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.