文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

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はこのスタック領域が不足したときに発生する例外。

例)

メソッド間で無限に呼び出しを行うとそのうちオーバーフローとなる。