ホームページ  >  記事  >  Java  >  Javaのスタックとヒープの違い

Javaのスタックとヒープの違い

(*-*)浩
(*-*)浩オリジナル
2019-11-11 09:54:343831ブラウズ

Javaのスタックとヒープの違い

ヒープとスタックについて話す前に、まず JVM (仮想マシン) メモリの分割について話しましょう: (推奨される学習: Java コース )

Java プログラムは、実行中にスペースを割り当てる必要があります。すべてのソフトウェアは、実行中にメモリ内にスペースを割り当てる必要があります。Java 仮想マシンも実行中にスペースを割り当てる必要があります。

JVM は、実行中にメモリ内のメモリ領域を開き、起動時にそれを独自のメモリ領域にさらに慎重に分割します。これは、仮想マシン内の各メモリが異なる方法で処理されるためです。 、個別に管理する必要があります。

JVM メモリは 5 つの部分に分割されています:

1. レジスタ、

2. ローカル メソッド領域、

3.メソッド領域;

4. スタック メモリ;

5. ヒープ メモリ。

ヒープとスタックに注目しましょう:

スタック メモリ: スタック メモリは、まずローカル変数を格納するメモリ領域です。メソッド内で定義されている変数はローカル変数 (メソッドの外にあるものはグローバル変数) であり、for ループ内で定義されている変数もローカル変数です。ローカル変数を定義する前に関数を最初にロードする必要があるため、メソッドは最初にスタックされます。変数には独自のスコープがあり、スコープを出ると解放されます。

ローカル変数のライフサイクルは非常に短いため、スタック メモリは非常に迅速に更新されます。

ヒープ メモリ: は配列とオブジェクトを格納します (実際、配列はオブジェクトです)。new によって作成されたものはすべてヒープにあり、エンティティ (オブジェクト) もヒープに格納されます。データをカプセル化するために使用され、複数(エンティティの複数の属性)をカプセル化します。1つのデータが消えても、エンティティは消えずに引き続き使用できるため、いつでもヒープが解放されることはありませんが、スタックは異なります. はすべて単一の変数であり、変数は解放されると消滅します。

ヒープ内のエンティティは解放されませんが、ガベージとして扱われます。Java には、それらを随時収集するガベージ コレクション メカニズムがあります。

ヒープとスタックの違い:

1. スタック メモリはローカル変数を保存し、ヒープ メモリはエンティティを保存します。

2. ローカル変数のライフサイクルが非常に短いため、スタック メモリの更新速度はヒープ メモリの更新速度よりも高速です;

3. 変数のライフ サイクルが終了すると、スタック メモリに格納されたエンティティは、完了すると解放され、ヒープ メモリに格納されたエンティティはガベージ コレクション メカニズムによって時々リサイクルされます。

以上がJavaのスタックとヒープの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。