4種類のローダの適用シーンと親委任モデル


面接では、4種類のローダーと両親の委任メカニズムをよく聞きます.
まず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クラスであると勘違いし、「ウイルスコード」が実行される可能性がある.