Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GCについて

14,362 views

Published on

Published in: Technology
  • Be the first to comment

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 />

×