classクラスローダーの紹介】
クラスローダーは、クラスファイルをJVM仮想マシンにロードするために使用されます。 JVMには、ブートストラップクラスローダー、拡張クラスローダー、アプリケーションクラスローダーには3種類のローダーがあります。さらに、java.lang.classloaderクラスを継承して、カスタムローダーを作成することもできます。
【クラスローダータイプ】
1。Bootstrap:Javaクラスではありません。 JVMカーネルに埋め込まれたC ++で記述され、JNI(JavanativeInterface)を使用してネイティブコード実行を呼び出すために使用されます。ブートクラスローダーは、java_home/jre/libの下のRt.jarファイルなど、コアJavaクラスライブラリをロードする責任があります。このJARファイルには、次のような一般的なクラスが含まれています。
java.lang.system java.util.hashmap
2。extclassloader:java.lang.classloaderクラスから継承されており、拡張パスの下にJARファイルをロードするために使用されます。
3。アプリケーションクラスローダー(AppClassLoader):java.lang.classloaderクラスから継承し、クラスの下のクラスをロードするために使用されます。大声で笑う
classクラスローダーの委任メカニズム】
1.アプリケーションがクラスをロードする必要がある場合、必要なクラスのバイトコードファイルは、ブートストラップ、extclassloader、およびAppClassLoaderの順序で対応するパスの下にロードされます。
2.カスタムクラスをクラスファイルにコンパイルし、JARパッケージに入力し、java_home/jre/lib/ext Pathに配置できます。クラスローダーがロードされると、extclassoloaderローダーを使用してJava_home/jre/lib/ext Pathからロードされ、AppClassoloaderローダーを使用してクラスパスの下にロードされません。
3.ブートストラップ、extclassloader、appClassloader、およびクラスのロードに失敗した順にクラスローダーを使用した後、クラスは見つかりません:java.lang.classnotfoundexception
【アプリケーションデモ】
1.BootStrap:JVMカーネルに埋め込まれたC ++で書かれ、Javaクラスではありません
classloader loader = system.class.getClassLoader(); System.out.println(ローダー); // null
2。AppClassLoader:AppClassLoaderローダーを使用して、クラスの下のクラスをロードします
classloader loader = classloadertest.class.getClassLoader(); System.out.println(loader.getClass()。getName()); //sun.misc.launcher$appclassloader
3.EXTCLASSLOADER:Java_home/jre/lib/ext Pathの下にJavaクラスをロードするために使用されます。見つけたら、クラスパスにロードされません。
カスタムハロークラスを作成し、JARパッケージに入力して、C:/プログラムファイル/java/jdk1.7.0/jre/lib/ext/excelsoft.jarパスにエクスポートします。
classloader roader = hello.class.getClassLoader(); System.out.println(loader.getClass()。getName()); //sun.misc.launcher$texclassloasser
=========================================================
クラスローダーは、紹介のためだけに比較的複雑なトピックです!
要約します
上記は、JVMクラスローダーの基本的な分析に関するこの記事のすべての内容であり、すべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!