Webサーバー(または他のJavaプロセス)を起動すると、すべてのクラス(クラス定義のようなメタデータ)は、 の前であっても、サーバー/プロセスの起動時にロードされます。オブジェクトが作成されている間、またはインポートステートメントに遭遇している間のみ?JVMによってクラスがロードされるのはいつですか?
この質問は、JDK 8およびJDKのすべての6
Webサーバー(または他のJavaプロセス)を起動すると、すべてのクラス(クラス定義のようなメタデータ)は、 の前であっても、サーバー/プロセスの起動時にロードされます。オブジェクトが作成されている間、またはインポートステートメントに遭遇している間のみ?JVMによってクラスがロードされるのはいつですか?
この質問は、JDK 8およびJDKのすべての6
まず用で、バイトコードに、何輸入文はありません。バイトコードは、完全に完全修飾された名前を使用します。
次に、ほとんどのJVMのデフォルトの動作では、クラスの読み込みを「遅延」します。意味:クラスAをロードすると、JVMはAのすべての静的イニシャライザを実行するために必要なクラスだけをロードします。
したがって、AはBとCを使用します。 B、Cは、JVMがB respを必要とするコードを実行するときにのみロードされます。 Cをロードします。
自分のクラスローダーを書くときは、もちろん別のことをすることができます。
は、関連する行は、起動時にJVMがその意志のクラスについて何を知っている を必要としないように
のClassLoaderが設計されていますあなたの質問のコンテキストにある参照します実行時に読み込まれます。
最初はJVMが起動したときに何もロードされません。実行中のプログラムのクラス ファイルが最初にロードされ、その後、 バイトコードが実行される際に参照されるように、他の クラスおよびインタフェースがロードされます。
JVMはクラスの遅延読み込みを行いません。 クラスは、直接または間接的に必要なときにロードされます。
[Java仮想マシン仕様#5](http://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html)を参照してください。 – EJP