ホームページ  >  記事  >  Java  >  Java の StackOverflowError と OutOfMemoryError の違いは何ですか?

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

WBOY
WBOY転載
2023-08-27 12:09:061033ブラウズ

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 までご連絡ください。