JVMは、どのような状況の下で、すぐにクラスを初期化します

仮想マシン仕様厳格なルールのみ5例はすぐにクラス「初期化」(ロード、検証、および準備フェーズ開始前)でなければなりません。

  1. 以下のようなinvokestatic putstatic getstatic新しい4つの遭遇したバイトコード命令、、、。これは、4つの命令が一般的なシナリオです生成します。
    • 新しいキーワードを使用する場合は、オブジェクトをインスタンス化します。
    • 読み取りまたはクラスの静的フィールド設定時に(結果を除いて、最終的な変更は、静的フィールドの定数プールにコンパイルされています)。
    • あなたはクラスの静的メソッドを呼び出すと。
  2. 反射メソッド呼び出しクラスを使用してパッケージjava.lang.reflectで。
  3. クラスの初期化時に初期化された最初の親クラスを初期化しない親を発見するために準備します。
  4. 最初の(すなわち、mainメソッドを含むクラス)に実行されるように、ユーザによって指定されたメインクラスを開始するには、仮想マシンを初期化します。
  5. java.lang.invoke.MethodHandle最終的な分析結果の例REF_getStatic、REF_putStatic、REF_invokeStaticハンドルへの道、および対応するクラスが初期化されていない、このメソッドハンドルは、初期化する場合は、JDK 1.7の動的言語サポートを使用する場合、それがトリガされなければなりません。

 

要約:

  • これら5例は、クラスと呼ばれているアクティブな参照のすべてに加えて、パッシブリファレンス(パッシブリファレンスは、クラスの初期化させません)。
  • もう一つの発言:JVM仕様では必須制約のロードのタイミングのように、それは別のJVMの特定の実装に依存されるわけではありませんでした。

おすすめ

転載: www.cnblogs.com/keepTrying/p/11901334.html