ヒープとスタックについて話す前に、まず JVM (仮想マシン) メモリの分割について話しましょう: (推奨される学習: Java コース )
Java プログラムは、実行中にスペースを割り当てる必要があります。すべてのソフトウェアは、実行中にメモリ内にスペースを割り当てる必要があります。Java 仮想マシンも実行中にスペースを割り当てる必要があります。
JVM は、実行中にメモリ内のメモリ領域を開き、起動時にそれを独自のメモリ領域にさらに慎重に分割します。これは、仮想マシン内の各メモリが異なる方法で処理されるためです。 、個別に管理する必要があります。
JVM メモリは 5 つの部分に分割されています:
1. レジスタ、
2. ローカル メソッド領域、
3.メソッド領域;
4. スタック メモリ;
5. ヒープ メモリ。
ヒープとスタックに注目しましょう:
スタック メモリ: スタック メモリは、まずローカル変数を格納するメモリ領域です。メソッド内で定義されている変数はローカル変数 (メソッドの外にあるものはグローバル変数) であり、for ループ内で定義されている変数もローカル変数です。ローカル変数を定義する前に関数を最初にロードする必要があるため、メソッドは最初にスタックされます。変数には独自のスコープがあり、スコープを出ると解放されます。
ローカル変数のライフサイクルは非常に短いため、スタック メモリは非常に迅速に更新されます。
ヒープ メモリ: は配列とオブジェクトを格納します (実際、配列はオブジェクトです)。new によって作成されたものはすべてヒープにあり、エンティティ (オブジェクト) もヒープに格納されます。データをカプセル化するために使用され、複数(エンティティの複数の属性)をカプセル化します。1つのデータが消えても、エンティティは消えずに引き続き使用できるため、いつでもヒープが解放されることはありませんが、スタックは異なります. はすべて単一の変数であり、変数は解放されると消滅します。
ヒープ内のエンティティは解放されませんが、ガベージとして扱われます。Java には、それらを随時収集するガベージ コレクション メカニズムがあります。
ヒープとスタックの違い:
1. スタック メモリはローカル変数を保存し、ヒープ メモリはエンティティを保存します。
2. ローカル変数のライフサイクルが非常に短いため、スタック メモリの更新速度はヒープ メモリの更新速度よりも高速です;
3. 変数のライフ サイクルが終了すると、スタック メモリに格納されたエンティティは、完了すると解放され、ヒープ メモリに格納されたエンティティはガベージ コレクション メカニズムによって時々リサイクルされます。
以上がJavaのスタックとヒープの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。