Java
 Computer >> コンピューター >  >> プログラミング >> Java

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


JVMは、メモリスペースを2つの部分に分割しました。1つはスタックで、もう1つはヒープスペースです。スタックスペースは、主にメソッド実行とローカル変数の順序を格納するために使用されます。

スタックは常にブロックをLIFOの順序で格納しますが、ヒープメモリはメモリブロックの割り当てと割り当て解除に動的割り当てを使用しました。

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

  • プログラムが終了しました
  • メモリフリー

対照的に、スタックに割り当てられたメモリは、関数が戻るまで存続します。違いは次のとおりです。

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

  1. スタックとヒープの違い

    この投稿では、スタックとヒープの違いを理解します スタック これは線形データ構造です。 メモリは連続した(連続した)ブロックに割り当てられます。 スタックのメモリは、コンパイラの指示を使用して自動的に割り当ておよび割り当て解除されます。 スタックの構築と維持にかかる費用は少なくて済みます。 実装は簡単です。 サイズは固定されています。したがって、柔軟性はありません。 その唯一の欠点は、サイズが固定されているため、メモリが不足していることです。 すべてのブロックが占有されていない場合、メモリも無駄になります。 スタックの要素にアクセスするのに

  2. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり