Upload
di-ai
View
220
Download
2
Embed Size (px)
Citation preview
JAVA HOTSPOT VMにおけるGCの振る舞い艾 迪
開発室
14/11/04
Line Fukuoka
GCとは?
ガーベジ・コレクション:GC ( Garbage Collection )
• プログラムが動作するとオブジェクトはメモリ上にロードされます。
• オブジェクトが多くなると、使用できるメモリ領域が一杯になる、新しいオブジェクトをロードできず、プログラムを実行することができなくなります。
• このような状態を回避するための仕組みがGC
1
OutOfMemoryError
GCの種類• Minor GC
• New領域(Young)のみを対象としたGCで、比較的短時間で処理が終了する。
• Full GC
• 主にOld領域とPermanent領域を対象としたGCで、処理に時間がかかる。
2
Minor GC
Full GC
GCが発生するタイミング
• ヒープメモリ中に新規オブジェクトを作成するために必要な空き領域が足りなくなった時
• プログラム中でSystem.gc()が実行された時• 「-XX:+DisableExplicitGC」を指定することにより、無効化することができる
• JVMで実行する処理がなくなってアイドル状態になった時
• オプションで設定された定期的なGC
• JDK6デフォルト1時間
3
GCの振る舞い
4
Edenが一杯になるとMinor GC実行
Minor GC実行
何回のMinor GC実
行後、生き残ったオブジェクトはOldへ
To領域とFrom領域を入れ替える
使用中のオブジェクトをToへ移動
5
使用中のオブジェクトを判断するアルゴリズム
Generational Collector
• Permanent Generation
• New Generation
• Copying Collector
• Old Generation
• Tracing Collector
6
1. クラスオブジェクトの全てのインスタンスは回収された2. クラスをロードするClassLoaderも回収された3. クラスオブジェクトは他のどころに参照されていない
Copying Collector
7
int
reference
int
double
Java stack
To
Method Area
A
class object
(entity)
B
1.参照を辿る
3.この領域をクリア
class object
pointer class object
pointer
2.コピーして参照を更新
From
Tracing Collector
8
int
reference
int
double
Java stack
Old
Method Area
A
class object pointer
class object
(entity)
B
1.まずここを見る
2.参照を辿る
4.マークついてない、回収
mark-and-sweep とも呼ばれている
3.マークをつける
他にもいろいろなGCのアルゴリズム
• Reference Counting Collector
• Compacting Collector
• Adaptive Collector
9