Seita developer blog

ユーザ企業に努めるアプリケーションエンジニアがプログラミング、データベース、OS、SNS、ガジェットなどを中心に備忘録変わりに書いていきます。

【Java】 Java8のメモリ管理を整理してみた

Java8のメモリ管理の仕組みを改めて整理してみました。

 

 

 メモリイメージ

f:id:rey1229:20161207210140p:plain

 

各領域の概要

 

領域利用目的
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以上の)バッファ領域として利用される。
スレッドスタック スレッド毎に保持するスタックの領域。命令の順序をスタックする。