Java にはスタックのような後入れ先出し (Last In First Out) のシーケンシャル データ構造があり、これが java.util.Stack です。この場合、必然的に多くの人が前の質問についてさらに混乱することになります。実際、ヒープとスタックは両方ともメモリの一部であり、異なる機能を持っており、プログラムはこの領域にメモリを割り当てる必要があります。ご存知のとおり、すべての Java プログラムは JVM 仮想マシン内で実行されますが、ここで紹介するのは当然、JVM (仮想) メモリ内のヒープとスタックです。
#違い
Java におけるヒープとスタックの違いは、面接でよく聞かれる質問です。具体的な違いは次の点です:独自の役割を実行する
主な違いは、スタック メモリがローカル変数とメソッド呼び出しの保存に使用されることです。 ヒープ メモリは、Java でオブジェクトを保存するために使用されます。メンバー変数、ローカル変数、クラス変数のいずれであっても、それらが指すオブジェクトはヒープ メモリに格納されます。固有または共有
スタック メモリは単一のスレッドに属します。各スレッドはスタック メモリを持ち、そこに格納されている変数はスレッド内でのみ表示できます。つまり、スタック メモリはスレッドのプライベート メモリとして理解できます。 ヒープ メモリ内のオブジェクトはすべてのスレッドから見えます。ヒープ メモリ内のオブジェクトには、すべてのスレッドからアクセスできます。例外エラー
スタック メモリにメソッド呼び出しとローカル変数を保存するための空き領域がない場合、JVM は java.lang.StackOverFlowError をスローします。 生成されたオブジェクトを格納するための空き領域がヒープ メモリにない場合、JVM は java.lang.OutOfMemoryError をスローします。スペース サイズ
スタック メモリはヒープ メモリよりもはるかに小さいため、再帰を使用するとスタックがすぐにいっぱいになってしまいます。再帰が時間内に発生しない場合、StackOverFlowError 問題が発生する可能性があります。 -Xss オプションを使用してスタック メモリ サイズを設定できます。 -Xms オプションはヒープの開始サイズを設定し、-Xmx オプションは最大ヒープ サイズを設定します。 これは、Java におけるヒープとスタックの違いです。この問題をよく理解すると、開発上の問題を解決したり、ヒープ メモリとスタック メモリの使用状況を分析したり、パフォーマンス チューニングを実行したりするのに役立ちます。 php 中国語 Web サイト、無料のJava 入門チュートリアル が多数あり、オンラインで学習することを歓迎します。
以上がJavaヒープとスタックの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。