10
JAVA HOTSPOT VM おける GC の振る舞い 開発室 14/11/04 Line Fukuoka

Java hotspot vmにおけるGCの振る舞い

  • Upload
    di-ai

  • View
    220

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Java hotspot vmにおけるGCの振る舞い

JAVA HOTSPOT VMにおけるGCの振る舞い艾 迪

開発室

14/11/04

Line Fukuoka

Page 2: Java hotspot vmにおけるGCの振る舞い

GCとは?

ガーベジ・コレクション:GC ( Garbage Collection )

• プログラムが動作するとオブジェクトはメモリ上にロードされます。

• オブジェクトが多くなると、使用できるメモリ領域が一杯になる、新しいオブジェクトをロードできず、プログラムを実行することができなくなります。

• このような状態を回避するための仕組みがGC

1

OutOfMemoryError

Page 3: Java hotspot vmにおけるGCの振る舞い

GCの種類• Minor GC

• New領域(Young)のみを対象としたGCで、比較的短時間で処理が終了する。

• Full GC

• 主にOld領域とPermanent領域を対象としたGCで、処理に時間がかかる。

2

Minor GC

Full GC

Page 4: Java hotspot vmにおけるGCの振る舞い

GCが発生するタイミング

• ヒープメモリ中に新規オブジェクトを作成するために必要な空き領域が足りなくなった時

• プログラム中でSystem.gc()が実行された時• 「-XX:+DisableExplicitGC」を指定することにより、無効化することができる

• JVMで実行する処理がなくなってアイドル状態になった時

• オプションで設定された定期的なGC

• JDK6デフォルト1時間

3

Page 5: Java hotspot vmにおけるGCの振る舞い

GCの振る舞い

4

Edenが一杯になるとMinor GC実行

Minor GC実行

何回のMinor GC実

行後、生き残ったオブジェクトはOldへ

To領域とFrom領域を入れ替える

使用中のオブジェクトをToへ移動

Page 6: Java hotspot vmにおけるGCの振る舞い

5

使用中のオブジェクトを判断するアルゴリズム

Page 7: Java hotspot vmにおけるGCの振る舞い

Generational Collector

• Permanent Generation

• New Generation

• Copying Collector

• Old Generation

• Tracing Collector

6

1. クラスオブジェクトの全てのインスタンスは回収された2. クラスをロードするClassLoaderも回収された3. クラスオブジェクトは他のどころに参照されていない

Page 8: Java hotspot vmにおけるGCの振る舞い

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

Page 9: Java hotspot vmにおけるGCの振る舞い

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.マークをつける

Page 10: Java hotspot vmにおけるGCの振る舞い

他にもいろいろなGCのアルゴリズム

• Reference Counting Collector

• Compacting Collector

• Adaptive Collector

9