javaのメモリ空間利用とstackoverflow
Java Virtual Machine(JVM)のメモリ空間の使い方
Javaヒープ
Javaのプログラム内で使用されるオブジェクトや配列が格納されるメモリ空間です。
Cヒープ
JVMがネイティブライブラリを実行する際に使用するメモリ空間です。
スレッドスタック
JVMが持つスレッドの情報を格納します。
Javaヒープは「建物」,Cヒープやスレッドスタックは「庭」
建物
⇒JVMの種類や選択したGCの種類で間取りが変わるJavaヒープ
庭
⇒Cヒープやスレッドスタックなど,Javaヒープ以外で使われるメモリ空間
また,JVMには,メモリ空間のほかに,アプリケーションや,後述するガベージコレクタ,ファイナライザを実行する「スレッド」と呼ばれるものがあります。
スレッドはそれぞれ何かしらの役割があり,複数のスレッドが協調して1つの役割をこなすこともあります。スレッドは「敷地内に住んでいる人」としてイメージするといいでしょう。
引用:
第1回 JVMはどのようにメモリ空間を利用するのか:Javaはどのように動くのか~図解でわかるJVMの仕組み|gihyo.jp … 技術評論社
StackOverflowErrorはこのスタック領域が不足したときに発生する例外。
例)
メソッド間で無限に呼び出しを行うとそのうちオーバーフローとなる。