個人段階知識総括(二)javaにおけるクラスマウントメカニズムと動静的コンパイル
JAvaにおけるクラスマウントメカニズム
すべてのクラスはクラスローダによってロードされ、メモリにロードされたクラスはjava.lang.Classインスタンスに対応しています.クラスローダを説明する前にjava*(クラス)という動作の実行手順を見てください.1.JREを見つけます.2.JVM.dllを見つける;3.JVMを起動し、初期化する.4.Bootstrap Loaderを生成し、javaベースクラスを同時にロードする.5.ExtendedClassLoaderをロードします.6.AppClassLoaderをロードする.7.このクラスをロードします.
JAvaのクラスローダは3つの部分から構成されています:1クラスローダ(Bootstrap Loader)はBLと略称し、このクラスはC++で書かれ、java仮想マシンのカーネルに属し、JVMが起動すると
Javaベースクラスがマウントされます.これらのクラスはlibフォルダの下にパッケージされていますrt.jarの2標準拡張クラスローダ(Extended Loader)はELと略称し、javaによって作成され、マウントを担当して保存されます.
/jre/lib/extのクラスで、これらのjarファイルは開発者が新しいjarファイルを開発して追加したものです.3種類のパスローダ(AppClassLoaderBはALと略称し、javaによって作成され、アプリケーションの起動実行クラスのロードを担当する.この3つのクラスの間には相補的な相乗効果があり、ELはBLのサブクラスであり、ALはまたELを自分の親クラスに設定し、クラスローダが1つのロードを必要とする場合
クラスの場合は、親がこのクラスをロードしているかどうかを確認し、ロードしていない場合は親にロードのヘルプを要求し、親がnullの場合は
このクラスを自分でロードし、loadClassのソースコードを次に示します.
コードから分かるように、クラスをマウントする必要がある場合は、まずfindLoadedClassによってロードされたかどうかを判断します.
クラス、親を呼び出してparent.loadClass(name,false)をロードしない場合、親が空の場合Bootstrapを呼び出します.
Loaderがロードされ、Bootstrap Loaderが親として使用され、最後にロードできない場合はfindClassを呼び出してこのクラスを見つけます.
のClassを返します.
この方法のデフォルトはClassNotFoundException異常を投げ出すことであり,プログラムがここに実行されてマウントするには開発者が必要である.
このクラスをマウントするために自分のfindClassを作成します 以上は個人がネット上の資料を見てまとめたもので、もちろん今後の実践の中で深く理解する必要があります.
下層の東を見るたびに葛藤するが、java開発で何かをするにはjavaの下層に対して比較的全面的な
理解して、このようにしてやっと類に触れてバイパスして、一反三を挙げて、後でのコードの中でもっと規範化することができます.
すべてのクラスはクラスローダによってロードされ、メモリにロードされたクラスはjava.lang.Classインスタンスに対応しています.クラスローダを説明する前にjava*(クラス)という動作の実行手順を見てください.1.JREを見つけます.2.JVM.dllを見つける;3.JVMを起動し、初期化する.4.Bootstrap Loaderを生成し、javaベースクラスを同時にロードする.5.ExtendedClassLoaderをロードします.6.AppClassLoaderをロードする.7.このクラスをロードします.
JAvaのクラスローダは3つの部分から構成されています:1クラスローダ(Bootstrap Loader)はBLと略称し、このクラスはC++で書かれ、java仮想マシンのカーネルに属し、JVMが起動すると
Javaベースクラスがマウントされます.これらのクラスはlibフォルダの下にパッケージされていますrt.jarの2標準拡張クラスローダ(Extended Loader)はELと略称し、javaによって作成され、マウントを担当して保存されます.
クラスの場合は、親がこのクラスをロードしているかどうかを確認し、ロードしていない場合は親にロードのヘルプを要求し、親がnullの場合は
このクラスを自分でロードし、loadClassのソースコードを次に示します.
protected synchronized Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
// First, check if the class has already been loaded
Class c = findLoadedClass(name);
if (c == null) {
try {
if (parent != null) {
c = parent.loadClass(name, false);
} else {
c = findBootstrapClass0(name);
}
} catch (ClassNotFoundException e) {
// If still not found, then invoke findClass in order
// to find the class.
c = findClass(name);
}
}
if (resolve) {
resolveClass(c);
}
return c;
}
コードから分かるように、クラスをマウントする必要がある場合は、まずfindLoadedClassによってロードされたかどうかを判断します.
クラス、親を呼び出してparent.loadClass(name,false)をロードしない場合、親が空の場合Bootstrapを呼び出します.
Loaderがロードされ、Bootstrap Loaderが親として使用され、最後にロードできない場合はfindClassを呼び出してこのクラスを見つけます.
のClassを返します.
protected Class<?> findClass(String name) throws ClassNotFoundException {
throw new ClassNotFoundException(name);
}
この方法のデフォルトはClassNotFoundException異常を投げ出すことであり,プログラムがここに実行されてマウントするには開発者が必要である.
このクラスをマウントするために自分のfindClassを作成します 以上は個人がネット上の資料を見てまとめたもので、もちろん今後の実践の中で深く理解する必要があります.
下層の東を見るたびに葛藤するが、java開発で何かをするにはjavaの下層に対して比較的全面的な
理解して、このようにしてやっと類に触れてバイパスして、一反三を挙げて、後でのコードの中でもっと規範化することができます.