Javaメモリモデルにおける仮想マシンスタックの原理分析


Java仮想マシンはJavaプログラムを実行する過程で、管理されているメモリをいくつかの異なるデータ領域に分割します。これらの領域はそれぞれの用途があり、作成と廃棄の時間があります。一部のエリアは仮想マシンプロセスの起動に従って存在します。一部のエリアはユーザスレッドの起動と終了に依存して確立と廃棄されます。Java仮想マシンが管理するメモリには、以下の実行時のデータ領域が含まれます。下図のように(写真は「Java仮想マシンを深く理解する」という本から)。

メモリの中で、スタックは2つの部分に分けられています。一部はローカル・アプローチ・スタックで、仮想マシンのために使用されるNative方法のサービスです。具体的な仮想マシンは自由に実現できます。もう一つは仮想マシン・スタックです。主に仮想マシンのためにJava方法のサービスを実行するので、Javaスタックにもなります。

1.Javaスタックは仮想マシンスタックとも呼ばれています。つまり、私たちがよく言っているスタックです。JavaスタックはJava方法で実行されるメモリモデルである。
2.Javaスタックに格納されているのは、各スタックフレームが呼び出された方法に対応しており、スタックフレームには、局所変数テーブル(Local Varables)、操作数スタック(Operand Stock)、現在の方法に属するクラスを指すランタイムプール(ランタイム定数プールの概念が、方法エリアで部分的に会談した)の参照(Reference to runtimconpol)が含まれている。方法は、アドレスと追加情報を返します。スレッドが一つの方法を実行すると、対応するスタックフレームが作成され、確立されるスタックフレームが形成される。方法が実行された後、スタックはフレームをスタックから出す。したがって、方法にはリサイクルリソースが存在しないという説がある。
3.局部変数表は、名前の通り解釈しなくてもいいです。その役割は分かりますよね。方法における局所変数(方法で宣言された非静的変数および関数モザイクを含む)を格納するために使用されます。基本データ型の変数には、その値を直接記憶し、参照型の変数には、オブジェクトへの参照が保存されます。ローカル変数テーブルのサイズはコンパイラでサイズが決定されますので、プログラム実行中はローカル変数テーブルのサイズは変更されません。
4.数スタックを操作して、きっとデータ構造の中のスタックを学んだことがある友達は表現の価値を求める問題に対してよく知らないと思います。スタックの一番典型的な応用は表現に対して価値を求めることです。一つのスレッドの実行方法を考えると、実際には言葉を実行し続ける過程であり、結局は計算を行う過程である。したがって、プログラム中のすべての計算過程は、動作数によって助けられているといえる。
5.運転時定数池の参照を指します。方法の実行中にクラスの定数を使用する必要があるかもしれないので、運転時定数を参照する必要があります。
6.方法はアドレスを返し、一つの方法が実行された後、元の場所に戻るためには、スタックフレームには、アドレスを返すための方法を保存しなければならない。
7.各スレッドが実行している方法は異なるかもしれないので、各スレッドは自分のJavaスタックを有し、互いに干渉しない。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。