English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaにおけるスタックとヒープメモリの違い

JVMはメモリ空間を2つに分けます。一つはスタック、もう一つはヒープスペースです。スタックスペースは主にメソッドの実行順序とローカル変数のストレージに使用されます

スタックは常にLIFO順序でブロックを保持し、ヒープメモリは動的にメモリブロックを割り当て解除するために使用されます 

ヒープに割り当てられたメモリは、以下のいずれかのイベントが発生するまで存在します:

  • プログラム終了 

  • 記憶不能 

逆に、スタックに割り当てられたメモリは常に存在し、関数が戻るまで存在します。以下が違いです。

番号キースタックヒープメモリ
1
基本的
スタックメモリは寿命が短いプロジェクト、例えばローカル変数、オブジェクトの参照変数を格納するために使用されます 
ヒープメモリはオブジェクトとJREクラスのストレージに割り当てられます
2
注文方法 
スタックは常にLIFO(後入れ先出し)の順序で保持されます
ヒープメモリは動的に割り当てられ、メモリ内でブロックを割り当て解除する固定のパターンはありません 
3
サイズ
JVMパラメータを使用できます-XSSを使用してスタックメモリのサイズを増やします
JVMオプションを使用できます-Xmsと-Xmxを使用してヒープメモリのサイズを増減します。
4
可視性 
変数は所有者スレッドのみに見えます 
すべてのスレッドが見えます 
  5 
例外
JVMはjava.lang.StackOverflowErrorをスローします
JVMはjava.lang.OutOfMemoryErrorをスローします