クラスローダ21困難な点分析および分析の戦闘

クラスローダー実際の点分析と分析困難

ロードされている負荷クラスファイルの様々なタイプの場所を探す1:

public class MyTest18 {
    public static void main(String[] args) {
        System.out.println(System.getProperty("sun.boot.class.path"));//根类加载器
        System.out.println(System.getProperty("java.ext.dirs"));      //扩展类加载器
        System.out.println(System.getProperty("java.class.path"));    //系统类加载器
    }+
}

結果:

C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ sunrsasign.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfr.jar。C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \クラス

C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに; C:\ WINDOWS \日\のJava \ libに\ extに

C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ charsets.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ deploy.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\アクセス・ブリッジ64.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ cldrdata.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ dnsns.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ jaccess.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ jfxrt.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ localedata.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ nashorn.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\サーブレット-api.jarを; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunec.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunjce_provider.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunmscapi.jar ; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ sunpkcs11.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ extに\ zipfs.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ javaws.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jce.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfr.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ jfxswt.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\のjsse.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C :\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1 .8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラム\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラム\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\管理-agent.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ plugin.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ resources.jar; C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \ libに\ rt.jarの; E:\プログラムファイル(x86の)\ IdeaProject \ Javalearn \ 正規表現ああ\ OUT \生産の\ IdeaProject ; E:\プログラムファイル\ジェットブレーンズ\のIntelliJ IDEA 2017年3月4日\ libに\ idea_rt.jar

2.ルートクラスローダがロードファイル

  • 上記から知られている、ルートクラス・ファイルがロードされたロードの場所は次のとおりです。C:\プログラムファイル\のJava \ jdk1.8.0_131 \ JRE \クラス。

    • だから、ここJREの以下のフォルダを作成します。クラス/ JVM /×××の.classファイルを、最終的な結果を実行します。MyParent.classファイルは、ルートクラスローダによってロードされます。

    • public class MyTest18_1 {
          public static void main(String[] args) throws Exception {
              MyTest16 loader1 = new MyTest16("laoder1");
              loader1.setPath("C:\\Users\\admin\\Desktop\\");
              Class<?> clazz = loader1.loadClass("Jvm.MyParent");
              System.out.println("class : " + clazz.hashCode());
              System.out.println("class loader : "+clazz.getClassLoader());
          }
      }
      运行结果:
         class : 1761291320
         class loader : null     <---根类加载器
      

3.拡張クラスローダがロードファイル

  • 通常動作:結果から明らかに実行します。aesKeyGenerator拡張クラスローダを使用して。

    public class MyTest19 {
        public static void main(String[] args) {
            AESKeyGenerator aesKeyGenerator = new AESKeyGenerator();
            System.out.println(aesKeyGenerator.getClass().getClassLoader());
            System.out.println(MyTest19.class.getClassLoader());
        }
    }
    运行结果:
       sun.misc.Launcher$ExtClassLoader@610455d6
       sun.misc.Launcher$AppClassLoader@18b4aac2
    
  • 現在のディレクトリにクラスファイルをロードするために、拡張クラスローダーを設定する場合、上記の手順の操作は、NoClassDefFoundErrorが表示されます
    ここに画像を挿入説明

公開された25元の記事 ウォンの賞賛0 ビュー1452

おすすめ

転載: blog.csdn.net/qq_40574305/article/details/104793467