GCについて

8,976 views
9,643 views

Published on

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,976
On SlideShare
0
From Embeds
0
Number of Embeds
5,353
Actions
Shares
0
Downloads
26
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

GCについて

  1. 1. GCについて<br />cactusman<br />
  2. 2. 自己紹介<br />HN:cactusman(さぼてん) <br />年齢:0x1d <br />出身:関西 <br />所属:java-ja,Wicket-ja<br />肩書き:Hudsonコミッタ<br />
  3. 3. GCについてですが<br />
  4. 4.
  5. 5. 読め!<br />
  6. 6. 注意事項<br />対象は初心者<br />マニアックなことは話しません。<br />
  7. 7. アジェンダ<br />GCについて<br />基本アルゴリズム<br />HotSpotVMのGC<br />
  8. 8. GCとは<br />プログラム上で不要となったメモリをまとめる動作<br />メモリ領域上の不要なゴミを見つける<br />ゴミを回収し、プログラマが再度利用できるようにする<br />
  9. 9. 一言で言うと<br />
  10. 10.
  11. 11. ルート<br />ゴミ<br />
  12. 12. GCを学ぶ意義<br />メモリ領域の効率的な使い方を意識<br />枯れない技術<br />1960~<br />技術的に面白い(らしい)<br />
  13. 13. JavaにおけるGC<br />「Java仮想マシン」(JVM)では実装依存<br />「Java仮想マシン仕様書 第2版」<br /> 第3章 Java仮想マシンの構造<br /> 冒頭に記述<br />今回のJVMのGCはHotSpotに<br />ついて<br />
  14. 14. GCの基本アルゴリズム<br />マーク&スイープ<br />参照カウント<br />コピー<br />GCアルゴリズムはこの基本アルゴリズムの派生<br />
  15. 15. マーク&スイープ<br />ルート要素からたどれるオブジェクトをマークしていく<br />マークのないオブジェクト(ゴミ)を回収する<br />
  16. 16. マーク&スイープ<br />メリット<br />実装が簡単<br />デメリット<br />フラグメンテーション<br />アローケーション速度<br />停止時間が長い<br />
  17. 17. 参照カウント<br />自身のオブジェクトが参照されている数のカウンタをもっている<br />参照される度に+1、参照が切れる度に-1される<br />カウンタが0になった時点で解放される<br />
  18. 18. 参照カウント<br />メリット<br />参照が切れたタイミングで解放処理が行える<br />最大停止時間が短い<br />ポインタをたどる必要がない<br />デメリット<br />循環参照を回収できない<br />カウンタの値の増減処理が重い<br />カウンタに多くのビットが必要<br />実装が煩雑<br />
  19. 19. コピー<br />コピー元のヒープをfrom-space、コピー先のヒープをto-spaceの二つの領域がある<br />ルートからオブジェクトをたどりながら、オブジェクトをfromからtoへコピーする<br />コピーが終わると、from内のオブジェクトをすべて捨てる<br />
  20. 20. コピー<br />メリット<br />スループットがいい<br />メモリ回収と同時にコンパクションを行える<br />フラグメンテーションが起きない<br />FreeList(ヒープの空き部屋リスト)を使わないため、allocate処理が早い<br />デメリット<br />ヒープ領域が余分に取る<br />
  21. 21. HotSpotVMにおける世代別GC<br />世代別GCとは<br />「多くのオブジェクトは若くして死ぬ」という経験則<br />ヒープ領域を新世代、旧世代というように世代別にわける<br />GCを実行するとオブジェクトは歳をとる<br />ある閾値を超えるとオブジェクトは旧世代へと移動する<br />新世代領域を頻繁にGCする<br />
  22. 22. Yang<br />Eden<br />Suvivor2<br />Tenured<br />ヒープ領域<br />Suvivor1<br />Old<br />
  23. 23. GCの種類<br />Scavenge GC<br />コピーGC<br />Full GC<br />マーク&スイープGC<br />
  24. 24. Scavenge GC<br />
  25. 25. Scavenge GC<br />
  26. 26. Scavenge GC<br />
  27. 27. その他<br />Young領域に対するパラレルGC<br />Old領域に対するパラレルGC<br />Mostly Concurrent Mark & Sweep GC(M-CMS)<br />ほとんどの過程を並列化<br />G1GC(Garbage-First GC)<br />

×