Javaで用意されている Built-Inクラスローダーは3つ。
あんまり気にする必要はないけど、知っておくと便利。
Bootstrap Class Loader
Javaのランタイムに含まれる基本クラス専用ローダー
$JAVA_HOME/jre/lib
ディレクトリのクラス専用
Extension Class Loader
JDK用の拡張クラスローダーというもの
$JAVA_HOME/lib/ext
ディレクトリのクラス用
java.ext.dirs
というシステムプロパティで指定する事も可能。
System Class Loader
システムクラスローダー、
またはアプリケーションクラスローダーと呼ばれるもの。
アプリケーションレベルのクラス専用のローダー
一般的に、Javaのプログラム中で使うのはこれになる。
System Class Loader というのは、
実際にはAppClassLoader というクラス実装になっています。
このクラスは内部に、classpathで指定したURIを保持しています。
Java起動時に、-classpath
もしくは -cp
といったコマンドラインのオプションで指定したクラスパスを読み込んでいます。
(CLASSPATH環境変数で指定する事も可能)
クラスローダーの親子関係
これらのクラスローダーは親子関係になっています。
Bootrapがおおもとで、Extension、Systemクラスローダーが順に子の関係ですね。
Bootstrap > Extension > System
クラスローダーは、必要なリソース、クラスを検索する際、
まずは親クラスローダーに処理をまかせます。
もし、親ローダーの管理外のものであれば
また処理が子クラスに戻ってきます。
そして最終的に見つかったリソース、クラスを返す挙動になっています。
1件のコメント