JVMメモリモデルとパーティション

プログラムの実行中、Java 仮想マシンは jvm のメモリをいくつかの異なるデータ領域に分割して管理します。これらの領域にはそれぞれ独自の目的があり、作成時間と破棄時間も異なります。
jvm が管理するメモリ領域には次の領域が含まれます。
ここに画像の説明を書きます

スタック領域:
スタックは Java 仮想マシン スタックとローカル メソッド スタックに分割されます。

  • 焦点は、スレッドに対してプライベートであり、スレッドと同じライフサイクルを持つJava 仮想マシン スタックにあります。
  • 各メソッドの実行により、ローカル変数テーブル、操作スタック、ダイナミック リンク、メソッド出口などを格納するためのスタック フレームが作成されます。各メソッドは実行されるまで呼び出されます。仮想マシンにおけるスタックフレームのプッシュからポップまでの処理に相当します。
  • 一般に、スタックとはローカル変数テーブルの一部を指します。この部分には、コンパイル中に既知の 8 つの基本データ型のほか、オブジェクト参照や命令アドレスが格納されます。ローカル変数テーブルはコンパイル中に割り当てられ、メソッドの入力時にスタック内のローカル変数に割り当てられるメモリ サイズが決定されます。
  • StackOverFlowError と OutOfMemoneyError という 2 つの例外が発生します。スレッド要求のスタックの深さが仮想マシンで許可されている深さよりも大きい場合は、StackOverFlowError エラーがスローされます。仮想マシンのスタックは動的に拡張され、拡張が十分なメモリ領域に適用できない場合は、OutOfMemoneyError がスローされます。
  • ローカル メソッド スタックは、ローカル メソッド (ネイティブ) を提供するために仮想マシンによって使用されます。

ヒープ領域:

  • ヒープはすべてのスレッドによって共有される領域であり、仮想マシンの起動時にオブジェクト インスタンスを保存することのみを目的として作成されます。
  • ヒープ領域は GC の主要な領域であり、通常は若い世代と古い世代の 2 つのブロックに分かれています。より詳細に説明すると、若い世代は新しく作成されたオブジェクトを最も配置する Eden エリアに分割され、From survivor と To survivor は GC を生き残ったオブジェクトを保存します。デフォルトでは、比率はそれぞれ 8:1:1 です。
    ただし、多くの記事は 3 つのブロックに分かれており、メソッド領域は永続世代とみなされます。これはおそらくホットスポット仮想マシン部門に基づいていると思われますが、たとえば、IBM j9 には永続世代の概要がありません。どんなに分割されていても、それはオブジェクト インスタンスを保存するためです。
  • 例外 OutOfMemoneyError が発生します

メソッド領域:

  • スレッドで共有される領域は、仮想マシンがロードしたクラス情報、定数、静的変数などのデータを格納するために使用されます。Java 仮想マシンによってヒープの論理部分として記述されます。永久世代(パーマネントジェネレーション)とも呼ばれるのが慣例である。
  • ガベージコレクションがこのエリアに来ることはほとんどありませんが、主に定期的なプールのリサイクルとタイプのアンロードのために、リサイクルする必要もあります。
  • 定数プールは、コンパイル中に生成されたさまざまなバイトコードとシンボル参照を保存するために使用されます。定数プールには特定のダイナミクスがあり、コンパイル中に生成された定数を保存できます。また、string intern() メソッドなど、実行時の定数を定数プールに追加することもできます。

プログラムカウンター

  • 現在のスレッドによって実行されている行番号を示すインジケーター。次の命令はカウンタの値を変更することによって決定されます。ループ、分岐、ジャンプ、例外処理、スレッド回復などはすべてカウンタに依存して完了します。
  • Java 仮想マシンのマルチスレッドは、スレッドを順番に切り替えてプロセッサの実行時間を割り当てることで実現されます。スレッド スイッチが正しい位置に回復するには、各スレッドに独立したプログラム カウンターが必要であるため、スレッド プライベートとなります。
  • OutofMemoryError を指定しないJava 仮想マシンの唯一のブロック

jvm パーティションは大まかにこのブロックであり、その中には多くの詳細が含まれており、各モジュールのアルゴリズムは非常に複雑です。ここでは、いくつかの基礎知識をマスターするために、パーティションについて簡単に紹介します。

おすすめ

転載: blog.csdn.net/m0_67265464/article/details/126743758