# 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 サイトの他の関連記事を参照してください。