Javaクラスローダー
各Javaクラスは、クラスローダーによってロードされなければならない。さらに、Javaプログラムは外部ライブラリ(つまり、プログラムの作者とは別の誰かが開発し提供するライブラリ)を利用する可能性もあり、また、それ自身が複数のライブラリで構成されている場合もある。
JVMが開始されると、3つのクラスローダーが使用される:
ブートストラップクラスローダー (bootstrap class loader)
拡張クラスローダー (extension class loader)
システムクラスローダー (system class loader)
ブートストラップクラスローダーは、中核のJavaライブラリを <JAVA_HOME>/lib ディレクトリからロードする。このクラスローダーはJavaVMの中心部分であり、ネイティブコードで記述されている。
拡張クラスローダーは、拡張ディレクトリ (<JAVA_HOME>/lib/ext や、java.ext.dirsプロパティで指定された他のディレクトリ) にあるコードをロードする。これは、sun.misc.Launcher$ExtClassLoader クラスで実装されている。
システムクラスローダーは、java.class.path、すなわちシステム環境変数 CLASSPATH にあるクラスをロードする。こちらは、sun.misc.Launcher$AppClassLoader クラスで実装されている。