Java仮想マシン構造、メモリ管理に関する基礎知識(2)

1780 ワード

クラス・ロード・メカニズム
クラスのライフサイクル全体には、ロード、検証、準備、解析、初期化、使用、およびアンインストールの7つのフェーズクラスロードが含まれます.ロード->検証->準備->解析->初期化は、順序によって行われるか完了するのではなく、順序によって行われ、通常は互いに交差して混合され、1つのフェーズで実行中に別のフェーズを呼び出したりアクティブにしたりすることができます.
  • は、クラスの全限定名によって定義されたバイナリバイトストリームをロードし、このバイトストリームをメソッド領域に保存し、javaスタックにこのクラスを表すjava.lang.Classオブジェクトを生成し、スタック内のデータと関連付けてロードフェーズの制御性が最も強い.クラスのローダはシステムでも自分で書いたローダでもよいからである(ClassLoader)
  • 検証Classファイルのバイトストリームに含まれる情報が現在の仮想マシンの要件に合致し、仮想マシンの自己セキュリティに危害を及ぼさないことを確認する(Classファイルはjavaコードでコンパイルされたものとは限らない)検証には、 (バイトストリームがClassファイルフォーマットの仕様に合致し、現在のバージョンの仮想マシンバージョンで処理されるかどうかを検証する)の4つの段階が含まれます. (クラスのメタデータ情報に対して意味検証を行い、すべてのメタデータ情報がjava文法規範に合致することを保証する)、 (データストリームと制御ストリーム分析を行い、クラスの方法に対して検証分析を行い、検証されたクラスの方法が実行時に仮想マシンの安全に危害を及ぼす行為をしないことを保証する)、 (これは最後の段階であり、主にクラス自体以外の情報を整合性チェックする)
  • .
  • クラス変数(静的変数)にメモリを割り当てる準備をし、クラス変数の初期値を設定するフェーズ
  • .
              (static),       ,                     java  
                           ( :0,0L,null,false,ect),     java           
    public static int value =100;  value=0
    public static final int value=100;  value=100(  )
    
  • 解析仮想マシンは定数プールのシンボル参照を直接参照に変換するプロセスであり、仮想マシンは最初の解析の結果をキャッシュする(実行時定数プールに直接参照を記録し、定数を解析状態として示す)ことを実現する.解析動作を繰り返すことを避ける.解析動作は主にクラスまたはインタフェース、フィールド、クラスメソッド、インタフェースメソッドの4種類のシンボル参照に対して
  • を行う.
  • 初期化クラス初期化はクラスロードの最後のフェーズであり、初期化フェーズになると、クラス内のjavaプログラムコードの実行が本格的に開始されます.
  • はいつ初期化されますか?
  •      1、    new、getstatic、putstatic、invokestatic         ,                    
         2、  java.lang.refect             ,            
         3、           ,               ,            
         4、        ,              ,         。
    
    , , ,