27
GC にににに cactusman

GCについて

Embed Size (px)

Citation preview

Page 1: GCについて

GC についてcactusman

Page 2: GCについて

自己紹介• HN : cactusman (さぼてん) • 年齢: 0x1d • 出身:関西 • 所属: java-ja,Wicket-ja • 肩書き: Hudson コミッタ

Page 3: GCについて

GC についてですが

Page 4: GCについて
Page 5: GCについて

読め!

Page 6: GCについて

注意事項• 対象は初心者• マニアックなことは話しません。

Page 7: GCについて

アジェンダ• GC について• 基本アルゴリズム• HotSpotVM の GC

Page 8: GCについて

GC とは• プログラム上で不要となったメモリをま

とめる動作1. メモリ領域上の不要なゴミを見つける2. ゴミを回収し、プログラマが再度利用でき

るようにする

Page 9: GCについて

一言で言うと

Page 10: GCについて
Page 11: GCについて

ルート

ゴミ

Page 12: GCについて

GC を学ぶ意義• メモリ領域の効率的な使い方を意識• 枯れない技術– 1960 ~

• 技術的に面白い(らしい)

Page 13: GCについて

Java における GC

• 「 Java 仮想マシン」( JVM )では実装依存– 「 Java 仮想マシン仕様書 第2版」 第3章 Java 仮想マシンの構造 冒頭に記述

• 今回の JVM の GC は HotSpot について

Page 14: GCについて

GC の基本アルゴリズム

• マーク&スイープ• 参照カウント• コピー

• GC アルゴリズムはこの基本アルゴリズムの派生

Page 15: GCについて

マーク&スイープ1. ルート要素からたどれるオブジェクトを

マークしていく2. マークのないオブジェクト(ゴミ)を回

収する

Page 16: GCについて

マーク&スイープ• メリット– 実装が簡単

• デメリット– フラグメンテーション– アローケーション速度– 停止時間が長い

Page 17: GCについて

参照カウント• 自身のオブジェクトが参照されている数

のカウンタをもっている1. 参照される度に +1 、参照が切れる度に -

1 される2. カウンタが 0 になった時点で解放される

Page 18: GCについて

参照カウント• メリット– 参照が切れたタイミングで解放処理が行える– 最大停止時間が短い– ポインタをたどる必要がない

• デメリット– 循環参照を回収できない– カウンタの値の増減処理が重い– カウンタに多くのビットが必要– 実装が煩雑

Page 19: GCについて

コピー• コピー元のヒープを from-space 、コピー

先のヒープを to-space の二つの領域がある1. ルートからオブジェクトをたどりながら、

オブジェクトを from から to へコピーする

2. コピーが終わると、 from 内のオブジェクトをすべて捨てる

Page 20: GCについて

コピー• メリット– スループットがいい– メモリ回収と同時にコンパクションを行える• フラグメンテーションが起きない

– FreeList (ヒープの空き部屋リスト)を使わないため、 allocate 処理が早い

• デメリット– ヒープ領域が余分に取る

Page 21: GCについて

HotSpotVM における世代別 GC

• 世代別 GC とは– 「多くのオブジェクトは若くして死ぬ」とい

う経験則– ヒープ領域を新世代、旧世代というように世

代別にわける– GC を実行するとオブジェクトは歳をとる– ある閾値を超えるとオブジェクトは旧世代へ

と移動する– 新世代領域を頻繁に GC する

Page 22: GCについて

Tenured

Suvivor2

Eden

ヒープ領域

Suvivor1

Yang

Old

Page 23: GCについて

GC の種類• Scavenge GC– コピー GC

• Full GC– マーク & スイープ GC

Page 24: GCについて

Scavenge GC

Page 25: GCについて

Scavenge GC

Page 26: GCについて

Scavenge GC

Page 27: GCについて

その他• Young 領域に対するパラレル GC• Old 領域に対するパラレル GC• Mostly Concurrent Mark & Sweep GC ( M-

CMS )– ほとんどの過程を並列化

• G1GC ( Garbage-First GC )