ClassLoaderの種類について

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件のコメント

コメントを残す