研究ノート「Java仮想マシンの深い理解」 - メモリ領域
ランタイムデータ領域
これは、6つの部分に分かれています。
- プログラムカウンタ
- VMスタック
- ネイティブメソッドスタック
- Javaヒープ
- メソッド地区
図示のように:
プログラムカウンタ(スレッド・プライベート)
- プログラムカウンタは、現在のバイトコード実行スレッドの行番号指標であります
- バイトコードインタプリタは、実行すべき次の命令を選択するために、カウンタのバイトコードの値を変更することによって動作している場合
- 実行の正しい位置に戻すことができるスレッドスイッチを投稿する、各スレッドは、別々のプログラムカウンタを必要とします
- Java実行方法は、カウンタは、実行中の仮想マシンのバイトコード命令のアドレスを記録し、ネイティブメソッドが実行され、カウンタが空であります
- プログラムカウンタがでJava仮想マシンには表示されません唯一のもので
OutOfMemoryError
、地域のコンテキスト
Java仮想マシン・スタック(スレッド・プライベート)
- 各方法は、同時にスタックフレームを作成するときに実行されます
- それぞれの方法には、仮想マシンを再プレイするためにプッシュからプロセス上のスタックフレームのうちの対応、実行プロセスが完了するまでと呼ばれています
- 「スタックメモリは、」仮想マシンのスタックのローカル変数テーブル部分を指し
- 基本データ型に格納されているローカル変数テーブル
- 必要なローカル変数割当テーブルメモリ空間の再コンパイルの完了時
StackOverflowError
:仮想マシンで許可された深さよりも大きいスレッドの要求スタックの深さOutOfMemoryError
:動的に仮想マシンを展開し、スタックは、十分なメモリに適用することはできません
ネイティブメソッドスタック(スレッド・プライベート)
- 地元のメソッドを実行します
- 他の同様のスタックとJava仮想マシン
Javaヒープ(スレッドシェア)
- 仮想マシンの起動時に作成
- ストレージオブジェクトインスタンス
- ガベージコレクションのメインエリア
メソッド領域(スレッド株)
- 仮想マシンがロードされたクラス情報格納、定数、静的変数、すなわち、コンパイラコード、データ等
- リサイクルとタイプの定数プールをアンインストールします