4種類のローダの適用シーンと親委任モデル
1275 ワード
面接では、4種類のローダーと両親の委任メカニズムをよく聞きます.
まず4種類のローダについて理解します.
起動クラスローダ(
その他のクラスローダ:
拡張クラスローダ(
2両亲の委任メカニズムはよく理解して、1つのクラスをロードする时、自分は先にロードしないで、自分の父に渡して、お父さんはおじいさん(bootstrap classloader)に来るかもしれません.二人ともロードできないときだけ、自分でロードする番です.
メリットは、システムの安全、クラスの唯一を保証することです.ハッカーは
まず4種類のローダについて理解します.
起動クラスローダ(
Bootstrap ClassLoader
):C++
言語で実装され(HotSpot
の場合)、\lib
ディレクトリまたは-Xbootclasspath
パラメータで指定されたパスに格納されたクラスライブラリをメモリにロードする責任を負います.その他のクラスローダ:
Java
言語で実装され、抽象クラスClassLoader
から継承されます.次のようになります.拡張クラスローダ(
Extension ClassLoader
):\lib\ext
ディレクトリまたはjava.ext.dirs
システム変数で指定されたパスのすべてのクラスライブラリをロードします.アプリケーション・クラス・ローダ(Application ClassLoader
).ユーザー・クラス・パス(classpath
)の指定クラス・ライブラリのロードを担当し、このクラス・ローダを直接使用できます.一般的に、カスタム・クラス・ローダがない場合は、デフォルトでこのローダを使用します.カスタムクラスローダ、自分でコードを書いてどのクラスをロードするかを決定する 2両亲の委任メカニズムはよく理解して、1つのクラスをロードする时、自分は先にロードしないで、自分の父に渡して、お父さんはおじいさん(bootstrap classloader)に来るかもしれません.二人ともロードできないときだけ、自分でロードする番です.
メリットは、システムの安全、クラスの唯一を保証することです.ハッカーは
java.lang.String
クラスをカスタマイズして、このString
クラスはシステムのString
クラスのような機能を持っていて、ある関数で少し修正しただけです.例えばequals
関数は、ハッカーがいくつかの「ウイルスコード」を追加する場合によく使用されます.JVM
にカスタムクラスローダによって追加される.この場合、親委任モデルがない場合、JVM
は、ハッカーがカスタマイズしたjava.lang.String
クラスがシステムのString
クラスであると勘違いし、「ウイルスコード」が実行される可能性がある.