クラスのロード処理は以下の契機で開始される. (<= #TODO 他にないか??)
HotSpot の起動時
HotSpot の起動時に, 幾つかの標準ライブラリのクラスがロードされる (java.lang.Object, java.lang.Thread, etc) (See: here for details).
メインクラスのロード時
HotSpot の初期化後, java コマンド (launcher) によりメインクラスのロード処理が行われる (See: here for details).
実行時コンスタントプールのシンボルの解決(resolution)時
実行時コンスタントプール中のクラス名/インターフェース名の解決が行われた際, 対象がまだロードされていなければロード処理が実行される (See: here for details).
(発生する件数としてはこのケースが一番多い (参考: HotSpot Runtime Overview : VM Class Loading))
クラスファイル検証中に, 検証のため他のクラスが必要になったとき.
(See: here for details)
クラスロードを伴う API が明示的に呼ばれたとき (java.lang.Class.forName(), java.lang.ClassLoader.loadClass(), Reflection APIs, etc)
指定されたクラスが明示的にロードされる (See: here for details).
ただし, ブートストラップ・クラスローダが直接ロードするのは標準ライブラリのクラス(rt.jar内のクラス等)だけで, それ以外のクラスは一旦 Java レベルのクラスローダーを経由した後で ClassLoader クラスでロードされる.
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.