ヒープとスタックの違い:
1. スタック領域割り当ての違い:
1. スタック (オペレーティング システム): 関数パラメータ値、ローカル変数値などを保存するために、オペレーティング システムによって自動的に割り当ておよび解放されます。その操作方法は、データ構造におけるスタックに似ています;
2. ヒープ (オペレーティング システム): 通常、プログラマによって割り当ておよび解放されます。プログラマが解放しない場合は、プログラマによって再利用される場合があります。プログラム終了時の OS の割り当て方法も同様です。
2. スタック キャッシュ メソッドの違い:
1. スタックは 1 次キャッシュを使用します。通常、スタックは呼び出されたときにストレージ領域にあります。呼び出しが完了した直後に解放;
2. ヒープは 2 次キャッシュに保存され、ライフ サイクルは仮想マシンのガベージ コレクション アルゴリズムによって決定されます (リサイクルできるわけではありません)。孤立オブジェクトになると)。したがって、これらのオブジェクトを呼び出す速度は比較的遅くなります。
ヒープ: メモリには、参照データ型が保存されます。参照データ型のサイズは決定できません。ヒープは、実際には、メモリ内の散在領域を使用するリンク リスト構造の記憶領域です。ヒープは次のように決定されます 参照型のサイズは直接決定されます 参照型のサイズの変更はヒープの変更に直接影響します
スタック: メモリに格納される値型ですサイズ2Mです。超えるとエラーが報告され、メモリがオーバーフローします
3. スタックのデータ構造の違い:
ヒープ(データ構造) ): ヒープは、次のようにツリーとみなすことができます: ヒープ ソート;
スタック (データ構造): 先入れ後出しのデータ構造。
機能: 先入れ後出し
先入れ後出しの場合、Linklist の基礎となる実装はリンク リスト構造であるため、Linklist を使用して何を探索するか先入れ後出し
コードは次のとおりです:
package com.zking.list; import java.util.LinkedList; public class Linklisttest { public static void main(String args[]) { LinkedList ll = new LinkedList(); for (int i = 0; i < 5; i++) { ll.addFirst(i); } ll.removeFirst(); for (Object object : ll) { System.out.println(object); } } }
実行結果:
によるとこの単純な例では、for ループでコレクションにデータを追加する順序が 0、1、2、3、4、
であることがわかります。delete メソッドが実行されると、 4 が削除され、最終的な走査結果は 3、2、1、0 になります。
したがって、これはスタックの特性 (先入れ後出し) を反映しています。 。
以上がスタック差の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。