GC黄金時代

3,114 views

Published on

GC黄金時代

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,114
On SlideShare
0
From Embeds
0
Number of Embeds
186
Actions
Shares
0
Downloads
16
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

GC黄金時代

  1. 1. GC黄金時代 関西GCKaigi02 nari/中村 成洋 ネットワーク応用通信研究所 Powered by Rabbit 0.6.2
  2. 2. 自己紹介
  3. 3. 自己紹介 nari/中村成洋と申します ブログ「I am Cruby!」 id:authorNari twitter @nari3 Rubyのコミッタ 「GCについて考える人」 GCアルゴリズム詳細解説 http://wiki.livedoor.jp/author_nari/ 2/190
  4. 4. 注意 GCがかなり好きです
  5. 5. 自分歴史 高校卒業(機械科) アイス工場勤務(3年) コンピュータスクール(半年) 福岡のIT企業(2年) NaCl <- イマココ 4/190
  6. 6. GCの教育は受けてません ので テキトーな事をいうかもしれ ません m(_ _)m
  7. 7. 島根の方から来ました 6/190
  8. 8. 松江の方から来ました 7/190
  9. 9. せっかく大阪にきたので 大事なこと
  10. 10. 島根は鳥取の左です! 9/190
  11. 11. あんまり覚えて貰えない (住んでる本人も忘れる)
  12. 12. 覚え方 お茶碗を持つ方が島根 お箸を持つ方が鳥取
  13. 13. 株式会社ネットワーク応用通信 研究所(NaCl)に所属 12/190
  14. 14. 会社紹介
  15. 15. Q:何をやっている会社なの か?
  16. 16. A:普通にRailsアプリ等々の 受託開発を行っております
  17. 17. 会社のメンバ
  18. 18. Rubyに詳しい人がいる 前田修吾さん 17/190
  19. 19. RubyによるMacOSXデスクトッ プ開発に詳しい人がいる 高尾宏治さん 18/190
  20. 20. WEBrickに詳しい人がいる 後藤裕藏さん 19/190
  21. 21. GCに詳しい人がいる 松本行弘さん 20/190
  22. 22. 奇妙な言語に詳しい人がいる 原悠さん(yhara先生) 21/190
  23. 23. まだまだ紹介しきれない人々 が! 卜部さん 西田雄也さん 斉藤登さん etc.. おまけ:nariさん 22/190
  24. 24. 注意(1)
  25. 25. Ruby 1 : 9 GC
  26. 26. Rubyの話は あまりしません
  27. 27. おおらかな関西のRubyist さんは許してくれますよね。 別にRubyの話しなくても…
  28. 28. もし、RubyのGCを詳しく知りた かったら… http://www.nicovideo.jp/watch/sm3740599 27/190
  29. 29. もし、RubyのGCを詳しく知りた かったら… RHG(良書) レアでアレなGCの話 - RubyistMagazine http://jp.rubyist.net/magazine/?0025- RareAreGCTalk narihiro.info http://www.narihiro.info/ 28/190
  30. 30. 注意(2)
  31. 31. GCの話を50分するのはは じめて
  32. 32. しかも最後のセッション…
  33. 33. 関西RubyKaigi02は チャレンジングですね (^q^)アウー
  34. 34. 注意(3)
  35. 35. このセッションでは 1分間に5回「GC」と言いま す
  36. 36. つまり 50分250回「GC」
  37. 37. あなたは一日に250回 「GC」という単語を人の口 から聞いたことがあります か?
  38. 38. 「こ、これは、一生に一度あ るかのチャンスッッ!」 (逆に考えるんだ…)
  39. 39. しっかり聞いてください
  40. 40. 注意(4)
  41. 41. narioは今日走りません (京都が近いしね…)
  42. 42. そろそろnarioのことは忘れ てください ><
  43. 43. 緊急アンケート
  44. 44. GCって何って人? ノシ
  45. 45. GCが好きな人? ノシ
  46. 46. 予想:5人
  47. 47. GCのコード書いた or 読んだ人? ノシ
  48. 48. 予想:3人
  49. 49. RubyのGC読んだことある 人?ノシ
  50. 50. parse.yより gc.cですよね!
  51. 51. GC黄金時代
  52. 52. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 53/190
  53. 53. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 54/190
  54. 54. GCとは?
  55. 55. Wikipedia プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的 に解放する機能である。 ガベージコレクション-Wikipedia- 56/190
  56. 56. つまり、ゴミを勝手に片付け てくれるよい奴
  57. 57. GCの立ち位置 58/190
  58. 58. 最近の言語にはほぼ搭載 Ruby Perl Java Haskell OCaml etc.. 59/190
  59. 59. モダンな言語の 条件の一つ 「GCがあること」
  60. 60. 非常に身近な存在 空気のようなもの GCを搭載したJavaからプログラミングを学ぶ人 多数 メモリ?はぁ?世代 実は僕も。。 知らない所で大変お世話になっている 61/190
  61. 61. ただ
  62. 62. 身近すぎて気づかない (灯台もと暗し)
  63. 63. 地味 あって当たり前 ゴミ掃除してなんぼ たまにバグで仕返し 64/190
  64. 64. 地味なGCが好き
  65. 65. よく質問される
  66. 66. 「なんで GC好きなんですか?」
  67. 67. これを聞かれると困る… (好きなものは好きなんで す)
  68. 68. 「なんで GC好きなんですか?」
  69. 69. 「運命です」
  70. 70. 注意 電波
  71. 71. 自分的にはかなり納得
  72. 72. でも、相手も納得する 理由も考えてみよう…。
  73. 73. 思い返してみると…。
  74. 74. GCは 「なんか気になる存在」
  75. 75. GarbageCollector = ゴミ 収集人
  76. 76. リアルな世界(1) ゴミは住人が家の中のゴミを集めて 79/190
  77. 77. リアルな世界(2) 住人が家の外に出す(この時点で掃除は解決している) 80/190
  78. 78. リアルな世界(3) リアルGCが取りに来る(GC終了) 81/190
  79. 79. GCな世界(1) 住人が家の中を散らかす 82/190
  80. 80. GCな世界(2) 勝手にGCが入ってくる 83/190
  81. 81. GCな世界(3) 勝手にゴミっぽいもの集めて捨てに行く 84/190
  82. 82. か、勝手になにやってんの!? 85/190
  83. 83. すごく「気になる」存在
  84. 84. 「なんで GC好きなんですか?」
  85. 85. 「知的好奇心と 知的欲求を満たすため」
  86. 86. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 89/190
  87. 87. GCのアルゴリズムは3種類に 分類される 参照カウント トレーシングGC マークスイープGC コピーGC 90/190
  88. 88. GCアルゴリズムの説明
  89. 89. 参照カウント オブジェクトの被参照数をカウント 92/190
  90. 90. 特徴 Cプログラマは一番なじみがある C++のsmart pointerも参照カウント 採用言語 Python Perl 93/190
  91. 91. メリット リアルタイム性が高い まったく参照されなくなった瞬間にオブジェクトが解放 される 負荷が分散 94/190
  92. 92. デメリット カウンタの増減をある程度プログラマが行う 解放漏れの可能性 循環参照 95/190
  93. 93. 循環参照 お互いがお互いを参照し合うため、被参照数が0になら ない メモリリーク! 96/190
  94. 94. 巨大な循環参照オブジェクト群 97/190
  95. 95. マークスイープGCと組み合 わせるのが一般的
  96. 96. マークスイープGC
  97. 97. 基本的な考え プログラムから到達できるオブジェクトは確実に 使用中(生きている) 具体的にはマシンスタック、レジスタ、グローバル変数内 から参照(ポインタ)があるオブジェクトがある場合 それらのオブジェクトの子オブジェクトは生きてい る 子オブジェクトの子オブジェクトは生きている…つ づく 100/190
  98. 98. マークフェーズ スタック、レジスタ内の参照を「起点」とする マーク、マーク 101/190
  99. 99. マークフェーズ 生きているオブジェクトと死んでいるオブジェクトが分け られる 102/190
  100. 100. ルート オブジェクトをトレースする「起点」となる領域 レジスタ、スタック、グローバル変数等々 トレーシングGCはルートをトレースの「起点」とす る 103/190
  101. 101. スイープフェーズ マーク有り => マークを消す マーク無し => 解放 104/190
  102. 102. 採用事例 Ruby HotspotVM etc.. 105/190
  103. 103. メリット 実装が簡単 保守的GCとの相性が良い(あとで説明) 106/190
  104. 104. デメリット フラグメンテーションが発生しやすい 虫食い状態 オブジェクトのアロケーションが遅くなる 虫食い状態から適切なサイズを確保しなければならな い 107/190
  105. 105. コピーGC
  106. 106. 同じサイズのメモリ領域を二つ 用意 109/190
  107. 107. アロケーションは常に一つの領 域 110/190
  108. 108. いっぱいになったらコピー 111/190
  109. 109. メリット トレースとコピーを同時にできる(速い) マークスイープは、マーク、スイープと2パス フラグメンテーションがない アロケーションも速い 112/190
  110. 110. デメリット 2倍のメモリ領域が必要 保守的GCとの相性が最悪 113/190
  111. 111. ここからは難しい話
  112. 112. 保守的GCとは?
  113. 113. ルート内のオブジェクトアドレス 探索 スタック、レジスタの中身はただのビット列 その中でオブジェクトのアドレスを見つける 条件:オブジェクトヒープの範囲内 条件:オブジェクトアライメント すり抜ける即値がでてくる(数値等の非ポインタ) 116/190
  114. 114. マークスイープGCの場合 即値だったとしてもポインタっぽかったらマーク (トレース)する 怪しい者はマーク! 本当は死んでいるオブジェクトがマークされる 保守的な思想 => 「保守的GC」と呼ばれる 117/190
  115. 115. コピーGCの場合 オブジェクトが移動 ルート内のポインタを書き換える 118/190
  116. 116. 書き換えたルート内の フィールドがもし即値だった ら… \(^o^)/
  117. 117. 保守的GCとコピーGCは相 性最悪
  118. 118. 正確なGCの登場 即値(数値、非ポインタ)を含まないルート オブジェクトのポインタを正確に判断できる 保守的な部分がない! コピーGCもOK 121/190
  119. 119. Rubyは? マークスイープ&保守的GC コピーGCは基本的に作れない 参照カウントは? がんばってください>< 色々制約があるのでいじるのが楽しい 122/190
  120. 120. そのほか 保守的GCを実装した処理系は少ない ほとんどが正確なGC Rubyはレア 123/190
  121. 121. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 124/190
  122. 122. GC黄金時代
  123. 123. まつもとさん曰く 40年代まで「コンピュータがない」 50年代まで「プログラミング言語がない」 60年代まで「アルゴリズムがない」 70年代まで「(経験の)蓄積がない」 80年代まで「ネットがない」 90年代まで「性能がない」 126/190
  124. 124. そして21世紀。 性能・価格が十分に。 リテラシーも向上。
  125. 125. まさに時は プログラミング黄金時代
  126. 126. ではGCの黄金時代は?
  127. 127. 結論
  128. 128. もう過ぎました
  129. 129. 60年代〜80年代が GC黄金時代
  130. 130. 大きく見ると 世の中にある GCアルゴリズムは その時代に作られた 研究の組み合わせ
  131. 131. GCの誕生
  132. 132. 1960年、John MacCarthy マークスイープの誕生 135/190
  133. 133. 経緯 Lisp処理系にメモリ解放用の関数があった リスト構造が複雑だからつかうのが難しい ('-')つ[マークスイープGC] え、いいねそれ 136/190
  134. 134. 初出し論文 我々はこの機能をGarbageCollectionと呼んでいる。 しかし、この論文にその名前は使わないことにした。 もし使おうとすれば、言葉遣いにうるさい研究所の女性達が私を止めただろう。 Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part 1 137/190
  135. 135. 驚くほど完成されたアルゴ リズム
  136. 136. 1960年、Geoge E Collins 参照カウント 139/190
  137. 137. 経緯 マークスイープ? 効率悪いねー ('-')つ[参照カウント] え、いいねそれ 140/190
  138. 138. 初出し論文 McCarthyの解決法は確かに美しいよ。でも、この方法は非効率だね。 A Method for Overlapping and Erasure of Lists 141/190
  139. 139. 3年後 循環参照問題発覚 orz
  140. 140. 1963年、Marvin Minsky コピーGC 論文を読むと二つ目の記憶領域はテープ!! 143/190
  141. 141. たった3年でGCの基礎がで きあがっている
  142. 142. それから現在までは改良の 歴史なのです
  143. 143. GCは古い技術 GCの歴史はRubyより古い 約50年前からあって、ずーっと使われ続けている 逆に考えると「勉強しても損はなさそう!」 火は消えていない 146/190
  144. 144. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 147/190
  145. 145. GCの未来について考えて みた
  146. 146. GCの未来 これから多くのGCが実装されるだろう なぜならモダンな言語にGCは必須だから ほとんどのGCは言語オーダーメイド 言語の特性にあったGC 149/190
  147. 147. どんどんGCは実装される
  148. 148. 結論
  149. 149. GCのアルゴリズム的な黄 金時代は過ぎ去った
  150. 150. しかし、実装的な 黄金時代はこれからだ!
  151. 151. GC再誕
  152. 152. 禁句 これってつまり「プログラミ ング(実装)黄金時代」です か?
  153. 153. お釈迦様の手のひらを飛ん でいたのか! ><
  154. 154. GCアルゴリズムの進化(未 来編)
  155. 155. GCアルゴリズムの進化(未来 編) 言語にGCを実装する ある問題にぶつかる 問題を回避するための工夫 それ一般化できるんじゃね? 実装の先行のアルゴリズムが増えてくる 158/190
  156. 156. これからは 「GCプログラミング黄金時 代」 新しいGCアルゴリズムが生 まれる
  157. 157. GCにはニーズがある
  158. 158. ニーズがあれば技術は革 新する (新しいアルゴリズム etc..)
  159. 159. 若干の不安 大容量ストレージが安価になっている ゴミとか放っておけばよいという考え GCは不要? それでも行儀の悪いプログラムはある ストレージは有限、いつかは枯渇する 状況にあったGCが必要となる 162/190
  160. 160. 具体的な未来
  161. 161. SSD 近々の変化としてSSD 高速なストレージへのアクセス 時代にあったGCが必要になる 164/190
  162. 162. 並列性 CPUコアの並列化 言語処理系の並列化 GCも並列化していく すでにしているものもある 165/190
  163. 163. ハードウェア ハードウェアがGCをサポート 実例もあり Pauseless GC http://www.nminoru.jp/~nminoru/java/cms/ pauseless_gc.html 166/190
  164. 164. 機械学習の組み込み 学習 オブジェクトの中身 アロケーション時のバックトレース オブジェクトの寿命を学習 それぞれの寿命にあったGCを行う 167/190
  165. 165. 「他にもこんな未来がある かも!」って人は声をかけて ください ><
  166. 166. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 169/190
  167. 167. おまけ:RubyGCの未来
  168. 168. 最新のトピック 「Ruby のメモリ管理の改善」 笹田耕一先生 ヒープサイズを上手く調整する 「世代別Mostly-Copying GCのRuby VMへの 実装に向けて」 永原さん、鵜川さん、岩崎さん 詳細は知らない(汗) 171/190
  169. 169. なんやかんや でよくなりますね!
  170. 170. 個人的なハックTODO TODO: LazySweep(起動オプション付き) TODO: マークに再帰を使わない TODO: 賢くヒープスロットを使う TODO: BoehmGCを組み込んだRuby 173/190
  171. 171. RubyGCの話、終わり
  172. 172. 続きはRubyKaigi2010で (たぶん)
  173. 173. 今日のアジェンダ GCとは GC三種の神器 GC黄金時代 GCの未来 おまけ:RubyGCの未来 まとめ 176/190
  174. 174. まとめ
  175. 175. まとめ GCは「何か気になる存在」 アルゴリズム的な黄金時代は過ぎた これからはどんどん実装していこう 178/190
  176. 176. 最後に宣伝
  177. 177. GC本のお話
  178. 178. GC本 GCの過去と未来を繋ぐ本 壮大な宣伝ではない 内容 アルゴリズム 3:7 実装 初心者にも優しい 様々な処理系のGCを紹介 Python,Rubinius,DalvikVM,V8,hotspotVM 死にそうです(後悔してます) 181/190
  179. 179. 来年中には何とか出したい です
  180. 180. 大問題
  181. 181. 誰が買うんだ?
  182. 182. まつもとさん曰く 言語処理系を作る人は買うべき 185/190
  183. 183. 3000人くらい居ますよね?
  184. 184. アンケート
  185. 185. 買ってくれる人 ノシ
  186. 186. ご静聴 ありがとうございました!
  187. 187. 質疑応答

×