English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JVMはメモリ空間を2つに分けます。一つはスタック、もう一つはヒープスペースです。スタックスペースは主にメソッドの実行順序とローカル変数のストレージに使用されます
スタックは常にLIFO順序でブロックを保持し、ヒープメモリは動的にメモリブロックを割り当て解除するために使用されます
ヒープに割り当てられたメモリは、以下のいずれかのイベントが発生するまで存在します:
プログラム終了
記憶不能
逆に、スタックに割り当てられたメモリは常に存在し、関数が戻るまで存在します。以下が違いです。
番号 | キー | スタック | ヒープメモリ |
---|---|---|---|
1 | 基本的 | スタックメモリは寿命が短いプロジェクト、例えばローカル変数、オブジェクトの参照変数を格納するために使用されます | ヒープメモリはオブジェクトとJREクラスのストレージに割り当てられます |
2 | 注文方法 | スタックは常にLIFO(後入れ先出し)の順序で保持されます | ヒープメモリは動的に割り当てられ、メモリ内でブロックを割り当て解除する固定のパターンはありません |
3 | サイズ | JVMパラメータを使用できます-XSSを使用してスタックメモリのサイズを増やします | JVMオプションを使用できます-Xmsと-Xmxを使用してヒープメモリのサイズを増減します。 |
4 | 可視性 | 変数は所有者スレッドのみに見えます | すべてのスレッドが見えます |
5 | 例外 | JVMはjava.lang.StackOverflowErrorをスローします | JVMはjava.lang.OutOfMemoryErrorをスローします |