【Java】 Java8のメモリ管理を整理してみた
Java8のメモリ管理の仕組みを改めて整理してみました。
メモリイメージ
各領域の概要
領域 | 利用目的 | |
---|---|---|
Javaヒープ | HotSpotVM上で起動するJavaプログラムのリソースを管理する領域。New領域とOld領域で構成される。 | |
New | 新規オブジェクトと閾値(-XX:MaxTenuringThreshold)未満のオブジェクトが配置される。Youngとも呼ばれる。 | |
Eden | 新規のオブジェクトが配置される。 | |
Survivor | From | CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされる。Survivorとも呼ばれる。 |
To | CopyGC(ScavengeGC、マイナーGC)が実行された際に、使用中のオブジェクトはここへコピーされる。Survivorとも呼ばれる。 | |
Old(Tenured) | New領域で閾値(-XX:MaxTenuringThreshold)を超えたオブジェクトが配置される。 | |
Nativeメモリ | JavaヒープがJVMにより管理されるのに対し、Native目盛はOSが管理する領域。 | |
Metaspace | クラスやメソッドの情報が格納される領域。 | |
Cヒープ | ネイティブ領域。JavaVM自身のリソースを管理する領域。NativeMethod、Javaスレッド自身、(8k以上の)バッファ領域として利用される。 | |
スレッドスタック | スレッド毎に保持するスタックの領域。命令の順序をスタックする。 |