7
4

More than 3 years have passed since last update.

【Java】StackOverflowErrorとOutOfMemoryErrorの違い

Last updated at Posted at 2020-10-03

Java Silverの勉強をするにあたり調べたことのメモ。

StackOverflowErrorとOutOfMemoryErrorの違いは何か?

StackOverflowErrorとは

クラス StackOverflowError
スタック領域でメモリがなくなることで発生するエラー

【発生する状況例】
メソッド内で再帰呼び出しを行う

【スタック領域とは】
ローカル変数やメソッドの情報を格納するメモリ領域のこと。
名前の通り、スタック状のデータ構造(後入れ先出し方式)を持つ。

メソッド内で自分自身のメソッドを呼び出し続けてしまうと、スタック領域にメソッドの情報が積み上がっていきパンクしてしまう。そうすると、JVM(Java Virtual Machine)がスタック領域が足りなくなったことを検知して、StackOverflowErrorを発生させる

OutOfMemoryErrorとは

クラス OutOfMemoryError

メモリー不足のために Java Virtual Machine がオブジェクトを割り当てることができず、ガベージコレクタによっても使用可能なメモリーをこれ以上確保できない場合にスローされます

ヒープ領域でメモリがなくなることで発生するエラー

【発生する状況例】
無限ループがおこっている
(参考: OutOfMemoryError例外の理解 )

【ヒープ領域とは】
インスタンスの情報を置くための領域のこと。

まとめ

JVMに割り当てられたメモリ(スタック)がいっぱいになるとStackOverflowErrorが発生する。
JVMがメモリ割り当てに失敗すると、OutOfMemoryErrorになる。

参考文献

ヒープ領域とは?スタック領域との違いや具体的な管理方法を解説!

スタック領域とは

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4