2017-01-13 4 views
4

でクラスをロードするときにClassLoaderクラスは、クラス およびリソースを検索するための委譲モデルを使用していますはなぜデリゲートのJava SE 7のマニュアルなどのJava

について説明します。 ClassLoaderの各インスタンスには、親クラス が関連付けられています。クラスまたはリソースの検索を要求された場合、 ClassLoaderインスタンスは、クラスまたは リソースの検索をその親クラスローダに委譲してから、 クラスまたはリソース自体を検索しようとします。

ClassLoaderがクラスまたはリソースの検索をその親に委譲する理由を教えてください。そうすることの目的または利点は何ですか?

+0

親クラスローダーがすでにロードしている場合は、同じクラスを複数回ロードすることを避けると思います! – alexbt

答えて

2

委託をクラスローディングするいくつかの有効な理由があります。と混乱してはならないJavaで特定のクラスがあり

セキュリティ:私は(私の理解から)その優先順位に応じてそれらを列挙されています。親上位の委譲モデルを持つことで、JVMはカスタムクラスローダーによってロードされたものではなく、それらのクラスのみを実行していることを確信できます。そうで、外部記憶装置又はネットワークからデータを読み出すバイトコードを解析し、メモリを割り当て、必要に応じて

避ける重複クラスインスタンス

クラスローディングは、コストのかかる操作です。したがって、クラスを一度だけロードするようにJVMを制限することもその理由の1つです。親上位のルールでクラスローダー階層を形成することでこれを達成できます。

クラススコープ

java.lang.*のようなJavaのコア部分である特定のクラスがあります。これらのクラスはJava言語の一部であり、ほとんどすべての場所で使用されます。クラスは完全修飾名とそのクラスをロードしたクラスローダーによって一意に識別されるので、そのようなクラスをロードする単一のクラスローダーを持つことが重要です。したがって、ブートストラップと拡張クラスローダがこれを処理します。 また、クラスとリソースを最上位にロードすると、クラスローダー階層の最下部にロードするよりも広い範囲が与えられます。

関連する問題