blog

Javaランタイム・データ領域の概要

スレッドセーフ。任意の瞬間の判断で、プロセッサはスレッドで1つの命令だけを実行します Thread private.各スレッドは独立したプログラム・カウンターを持ち、個々のスレッドのカウンターは互いに...

Aug 28, 2020 · 3 min. read
シェア

Javaランタイム・データ領域

Java仮想マシンの深い理解

概要

プログラム・カウンタ

現在のスレッドが実行したバイトコード命令のインジケータ

機能

  • スレッドセーフ。プロセッサは任意の時点で、1つのスレッドで1つの命令しか実行しません。
  • スレッドプライベート。各スレッドは個別のプログラム・カウンタを持ち、スレッド間のカウンタは互いに影響しません。

詳細

  • スレッドがJavaメソッドを実行している場合、このカウンタは実行中のVMバイトコード命令のアドレスを記録します。
  • ローカルメソッドが実行されている場合、このカウンタ値はNULLでなければなりません。

Java仮想マシン仕様

このメモリ領域は、OutOfMemoryErrorのケースについてJava仮想マシン仕様に規定がない唯一の領域です。

Java仮想マシン・スタック

Javaメソッド実行のためのスレッドメモリモデル。

機能

  • スレッド・プライベート。つまり、各スレッドは個別のJava仮想マシン・スタックを持ち、個々のスレッドのJava仮想マシン・スタックは互いに影響しません。

ランタイムの詳細

  • メソッドが実行されるたびに、Java 仮想マシンは、変数テーブル、オペランド・スタック、動的接続、メソッドの終了、およびその他の情報を格納するためのスタック・フレームを同期的に作成します。
  • 実行が完了するまで呼び出される各メソッドは、仮想マシンのスタック上でinからoutに向かうスタックフレームに対応します。
  • ローカル変数テーブルは、コンパイル時に既知のさまざまなJava仮想マシンの基本データ型とオブジェクト参照を保持します。

Java仮想マシン仕様

  • スレッドが仮想マシンで許容される以上の深さのスタックを要求すると、StackOverflowError 例外がスローされます。
  • Java VMスタック容量が動的に拡張できる場合、拡張時にスタックが十分なメモリーを要求できなかったときにOutOfMemoryError例外がスローされます。

ローカル・メソッド・スタック

ローカルメソッド実行スレッドメモリモデル。

機能

  • スレッドのプライベート

Java仮想マシン仕様

  • Java仮想マシン仕様には、ローカル・メソッド・スタック内のメソッドの言語、使用法、データ構造に関する強制的な規則がないため、特定の仮想マシンが必要に応じて自由に実装できます。
  • ローカル・メソッド・スタックは、スタックの深さがオーバーフローしたときやスタック拡張に失敗したときに、それぞれStackOverflowError例外やOutOfMemoryError例外もスローします。

Java

オブジェクトのインスタンスを格納します。

機能

  • メモリの最大値。
  • スレッドの共有
  • 仮想マシンの起動時に作成

Java仮想マシン仕様

  • 配列だけでなく、すべてのオブジェクト・インスタンスもヒープ上に割り当てる必要があります。

メソッド領域

型情報、定数、スタティック変数、オンザフライでコンパイラがコンパイルしたコードキャッシュなど、仮想マシンによってロードされたデータを格納します。

Java仮想マシン仕様

この領域におけるメモリ再利用の目標は、主に常時プールの再利用、タイプのアンロードです。

ランタイム定数プール

コンパイル時に生成されるさまざまなリテラルや記号参照を保持するメソッド領域の一部。

機能

  • クラスはロード後に格納されます。
  • 新しい定数は、実行時にプールに入れることもできます。例えば、String クラスの intern() メソッドです。

Java仮想マシン仕様

  • 必要な細かいことは何もしていません
Read next

CSS2D変換

2Dシフト 関数内の2D変換では、位置決めと同様に、ページ内の要素の位置を変更することができます。 2D回転は、要素を2次元平面内で時計回りまたは反時計回りに回転させることを指します。 ズームとは、その名の通り、要素を拡大・縮小することです。このプロパティを追加することで、要素の拡大・縮小を制御することができます。 1.複数の変形を同時にトラ...

Aug 27, 2020 · 2 min read