Java メモリのパーティショニング:
Java のメモリ割り当てでは、Java はメモリをメソッド領域、ヒープ、仮想マシン スタック、ローカル メソッド スタック、およびプログラム カウンターに分割します。メソッド領域とヒープはすべてのスレッドで共有されますが、仮想マシン スタック、ローカル メソッド スタック、およびプログラム カウンタはスレッドごとに分離されます。各エリアには独自の作成時間と破壊時間があります。
プログラムカウンター:
これは、現在のスレッドによって実行されたバイトの行番号インジケーターとして使用されます。 Java のマルチスレッドは、スレッドを順番に切り替えてプロセッサの実行時間を割り当てることによって実装されます。したがって、切り替え後に各スレッドが正しい位置に戻るためには、各スレッドに独立したプログラム カウンタが必要です。
Java 仮想マシン スタック:
それぞれが実行されると、ローカル変数テーブル、オペランド スタック、ダイナミック リンク、メソッド出口、その他の情報を格納するスタック フレームが同時に作成されます。仮想メモリ スタックは、私たちがよく「スタック」と呼ぶものです。ローカル変数テーブルに必要なメモリはコンパイル時に割り当てられます。
ローカルメソッドスタック:
仮想マシン スタックと同様に、仮想マシン スタックが仮想マシンに対して Java メソッド サービスを実行するのに対し、ローカル メソッド スタックはネイティブ メソッドを使用して仮想マシンにサービスを提供する点が異なります。
Java ヒープ:
すべてのプログラムで共有され、仮想マシンの起動時に作成されます。このメモリ領域は、オブジェクト インスタンスを保存するために使用されます。 Java 仮想マシンの規則によれば、Java ヒープは、論理的に連続している限り、物理的に不連続なメモリ空間に存在することができます。
メソッド領域:
ヒープと同じで、スレッド間で共有されます。その機能は、仮想マシンによってロードされたクラス情報、定数、静的変数、ジャストインタイム コンパイラによってコンパイルされたコードなどのデータを保存することです。
ランタイム定数プール:
メソッド領域の一部です。その機能は、コンパイル中に生成されたさまざまなリテラルおよびシンボル参照を保存することです。