Java の StackOverflowError と OutOfMemoryError の違いは何ですか?

WBOY
リリース: 2023-08-27 12:09:06
転載
1047 人が閲覧しました

Java の StackOverflowError と OutOfMemoryError の違いは何ですか?

# Java プログラムを実行するたびに、オペレーティング システムは JVM にメモリを割り当てます。 JVM はこのメモリを 2 つの部分に分割します。 1 つはスタック メモリ、もう 1 つはヒープ メモリです。スタックはメソッドの実行に使用され、ヒープはオブジェクトの保存に使用されます。スタックがいっぱいの場合、JVM は java.lang.StackOverflowError をスローし、ヒープがいっぱいの場合、JVM は java.lang.OutOfMemoryError をスローします。

StackOverflowError

  • スタックはメソッドの実行に使用されます。メソッド呼び出しごとに、スタック メモリにブロックが作成されます。
  • メソッドに関連するデータ (パラメーター、ローカル変数、オブジェクト参照など) がこのブロックに保存されます。
  • メソッドの実行が完了すると、ブロックは、そこに格納されているデータとともにスタックから削除されます。
  • メソッドを呼び出すときは常に、実行を完了してスタック メモリを離れる必要があります。
  • メソッドがスタック上に残っている場合、スタックはいっぱいになり、JVM は java.lang.StackOverflowError をスローします。

OutOfMemoryError

  • Java で作成したオブジェクトはヒープ メモリに保存されます。これらのオブジェクトが不要になった場合は、メモリから削除する必要があります。
  • ガベージ コレクターはヒープ メモリから不要なオブジェクトを削除します。
  • オブジェクトにライブ参照がある場合、ガベージ コレクターはそれらを削除しません。ライブ参照を持たないオブジェクトのみが削除されます。
  • メソッドを呼び出すときは常に、実行を完了してスタック メモリを離れる必要があります。
  • ヒープ メモリに新しいオブジェクト用のスペースが残っていない場合、JVM は java.lang.OutOfMemoryError をスローします。

以上がJava の StackOverflowError と OutOfMemoryError の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート