Java Silverの勉強をするにあたり調べたことのメモ。
StackOverflowErrorとOutOfMemoryErrorの違いは何か?
StackOverflowErrorとは
クラス StackOverflowError
スタック領域でメモリがなくなることで発生するエラー
【発生する状況例】
メソッド内で再帰呼び出しを行う
【スタック領域とは】
ローカル変数やメソッドの情報を格納するメモリ領域のこと。
名前の通り、スタック状のデータ構造(後入れ先出し方式)を持つ。
メソッド内で自分自身のメソッドを呼び出し続けてしまうと、スタック領域にメソッドの情報が積み上がっていきパンクしてしまう。そうすると、JVM(Java Virtual Machine)がスタック領域が足りなくなったことを検知して、StackOverflowErrorを発生させる
OutOfMemoryErrorとは
メモリー不足のために Java Virtual Machine がオブジェクトを割り当てることができず、ガベージコレクタによっても使用可能なメモリーをこれ以上確保できない場合にスローされます
ヒープ領域でメモリがなくなることで発生するエラー
【発生する状況例】
無限ループがおこっている
(参考: OutOfMemoryError例外の理解 )
【ヒープ領域とは】
インスタンスの情報を置くための領域のこと。
まとめ
JVMに割り当てられたメモリ(スタック)がいっぱいになるとStackOverflowErrorが発生する。
JVMがメモリ割り当てに失敗すると、OutOfMemoryErrorになる。