gc 擬(もどき)を js で書いてみた
TRANSCRIPT
1
GC GC GC GC 擬(もどき)を擬(もどき)を擬(もどき)を擬(もどき)をJS JS JS JS で書いてみたで書いてみたで書いてみたで書いてみた
@@@@to_uedato_uedato_uedato_ueda
2
自己紹介自己紹介自己紹介自己紹介
・・・・RubyRubyRubyRuby・・・・JSJSJSJS・・・・JavaJavaJavaJavaとか少し・・・とか少し・・・とか少し・・・とか少し・・・
・眼レフ初めました・眼レフ初めました・眼レフ初めました・眼レフ初めました
・ウィスキーの国・ウィスキーの国・ウィスキーの国・ウィスキーの国inininin京都京都京都京都の元住人の元住人の元住人の元住人
うえだうえだうえだうえだ @@@@to_uedato_uedato_uedato_ueda
4
・自己紹介・自己紹介・自己紹介・自己紹介
・・・・GCGCGCGCについてについてについてについて
・なぜ・なぜ・なぜ・なぜJSJSJSJSで作ろうと思ったのか?で作ろうと思ったのか?で作ろうと思ったのか?で作ろうと思ったのか?
・実装目標・実装目標・実装目標・実装目標
・デモっぽいもの・デモっぽいもの・デモっぽいもの・デモっぽいもの
✔✔✔✔✔✔✔✔
6
GCGCGCGCとは?とは?とは?とは?
ガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるプログラムのことプログラムのことプログラムのことプログラムのこと
すごく世話好きな人ですね。すごく世話好きな人ですね。すごく世話好きな人ですね。すごく世話好きな人ですね。
RubyRubyRubyRuby、、、、JavaJavaJavaJava、、、、JavaScriptJavaScriptJavaScriptJavaScriptPHPPHPPHPPHP、、、、PyhonPyhonPyhonPyhon、、、、LispLispLispLispとかに入ってるよとかに入ってるよとかに入ってるよとかに入ってるよ
7
・メモリ確保を・メモリ確保を・メモリ確保を・メモリ確保を自分自分自分自分でやるでやるでやるでやる・要らなくなったら・要らなくなったら・要らなくなったら・要らなくなったら自分自分自分自分で解放で解放で解放で解放
できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・
居ないとありがたみに居ないとありがたみに居ないとありがたみに居ないとありがたみに初めて気づく・・・初めて気づく・・・初めて気づく・・・初めて気づく・・・
GCGCGCGCが居ないと・・・が居ないと・・・が居ないと・・・が居ないと・・・
8
RubyRubyRubyRubyコミッタのコミッタのコミッタのコミッタのNari3Nari3Nari3Nari3という人がという人がという人がという人が「「「「GCGCGCGC黄金時代黄金時代黄金時代黄金時代」」」」のタイトルでセッションのタイトルでセッションのタイトルでセッションのタイトルでセッションをされました。をされました。をされました。をされました。
最後に・・・最後に・・・最後に・・・最後に・・・「「「「GCGCGCGC本を書いてるんだよね」本を書いてるんだよね」本を書いてるんだよね」本を書いてるんだよね」「誰が買うんだ?」「誰が買うんだ?」「誰が買うんだ?」「誰が買うんだ?」
KOFKOFKOFKOF2009&関西2009&関西2009&関西2009&関西RubyRubyRubyRuby会議会議会議会議
9
Nari3「買ってくれる人 ノシ」
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ(・∀・)ノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノΣΣΣΣ((((゚゚゚゚ДДДД゚;≡;゚゚;≡;゚゚;≡;゚゚;≡;゚дддд゚゚゚゚))))
10
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ(・∀・)ノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ
((((・∀・・∀・・∀・・∀・))))ノノノノ((((゚゚゚゚дддд゚゚゚゚))))ノノノノ俺も買う俺も買う俺も買う俺も買う
Nari3「買ってくれる人 ノシ」
12
なんでなんでなんでなんでJSJSJSJSででででGCGCGCGCなんなんなんなん????
・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう
・・・・CCCC とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?
・・・・RubyRubyRubyRubyも考えたけども考えたけども考えたけども考えたけどWebWebWebWebで表示したいなで表示したいなで表示したいなで表示したいな
・・・・WEBWEBWEBWEBに出力するならに出力するならに出力するならに出力するならJSJSJSJSでいいやでいいやでいいやでいいやんんんん
13
なんでなんでなんでなんでJSJSJSJSででででGCGCGCGCなんなんなんなん????
GCGCGCGCににににGCGCGCGC載せる奴おらん載せる奴おらん載せる奴おらん載せる奴おらんやろやろやろやろネタ的にと美味しい!!ネタ的にと美味しい!!ネタ的にと美味しい!!ネタ的にと美味しい!!
・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう
・・・・CCCC とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?
・・・・RubyRubyRubyRubyも考えたけども考えたけども考えたけども考えたけどWebWebWebWebで表示したいなで表示したいなで表示したいなで表示したいな
・・・・WEBWEBWEBWEBに出力するならに出力するならに出力するならに出力するならJSJSJSJSでいいやでいいやでいいやでいいやんんんん
14
・プログラム書いて実行できる・プログラム書いて実行できる・プログラム書いて実行できる・プログラム書いて実行できる
・メモリの状況が一目で判る・メモリの状況が一目で判る・メモリの状況が一目で判る・メモリの状況が一目で判る
・・・・GCGCGCGCのタイミングをボタンで制御のタイミングをボタンで制御のタイミングをボタンで制御のタイミングをボタンで制御
・・・・bootstrapbootstrapbootstrapbootstrap ((((5zj5zj5zj5zjさんも使用!!)さんも使用!!)さんも使用!!)さんも使用!!)
実装目標実装目標実装目標実装目標
17
NariNariNariNari3の3の3の3のblogblogblogblog2008200820082008年頃の記事・・・年頃の記事・・・年頃の記事・・・年頃の記事・・・
まさかのまさかのまさかのまさかのネタ被りネタ被りネタ被りネタ被り発覚発覚発覚発覚
20
・マーク&スイープ・マーク&スイープ・マーク&スイープ・マーク&スイープGCGCGCGC
・・・・RubyRubyRubyRubyでも使用されてるよでも使用されてるよでも使用されてるよでも使用されてるよ
・考え方は簡単・考え方は簡単・考え方は簡単・考え方は簡単markmarkmarkmarkフェイズフェイズフェイズフェイズsweepsweepsweepsweep(掃除)フェイズ(掃除)フェイズ(掃除)フェイズ(掃除)フェイズ
GCGCGCGCのアルゴリズムのアルゴリズムのアルゴリズムのアルゴリズム
22
markmarkmarkmarkフェイズフェイズフェイズフェイズ
root
obj1
obj2
obj3
obj4
obj5
obj6
obj7
obj8
obj9
obj10
Rootのデータでどれ見てる?
3 と 6 の obj 見てるよ。
root
ヒープヒープヒープヒープ
GCGCGCGC
23
markmarkmarkmarkフェイズフェイズフェイズフェイズ
root
obj1
obj2
obj3
obj4
obj5
obj6
obj7
obj8
obj9
obj10
3 と 6はどれ見てる?
特になし
4 と 8
obj3
obj6
GCGCGCGC
24
sweepsweepsweepsweepフェイズフェイズフェイズフェイズ
root
obj1
obj2
obj3
obj4
obj5
obj6
obj7
obj8
obj9
obj10
必要な物にチェックしたから残りはいらないね
GCGCGCGC
25
sweepsweepsweepsweepフェイズフェイズフェイズフェイズroot
1obj2
obj3
obj4
5obj6
7obj8
9 10
空きは1,5,7,9,10GCGCGCGC
フリーリストに追加フリーリストに追加フリーリストに追加フリーリストに追加
27
実際に動かしてみます実際に動かしてみます実際に動かしてみます実際に動かしてみます
http://deep-journey-7210.heroku.com/
http://t.co/wO305Gk7
28
・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの大きさが一致するとは限らない大きさが一致するとは限らない大きさが一致するとは限らない大きさが一致するとは限らない
・空きメモリの検索コストが増える・空きメモリの検索コストが増える・空きメモリの検索コストが増える・空きメモリの検索コストが増える
デデデデメリットメリットメリットメリット
フラグメンテーションフラグメンテーションフラグメンテーションフラグメンテーション
29
ヒントは身近にあるよヒントは身近にあるよヒントは身近にあるよヒントは身近にあるよ
皆さんよくご存知のあのツール皆さんよくご存知のあのツール皆さんよくご存知のあのツール皆さんよくご存知のあのツール
デデデデメリットを解消してみようメリットを解消してみようメリットを解消してみようメリットを解消してみよう
30
デデデデメリットを解消してみようメリットを解消してみようメリットを解消してみようメリットを解消してみよう
デデデデ ++++ フラグメンテーションフラグメンテーションフラグメンテーションフラグメンテーション
32
デデデデフラグフラグフラグフラグ →→→→ コンパクションコンパクションコンパクションコンパクション
デデデデメリット解消!!メリット解消!!メリット解消!!メリット解消!!
マーク&コンパクションマーク&コンパクションマーク&コンパクションマーク&コンパクションGCGCGCGC
33
・メモリを整理するコストが増大・メモリを整理するコストが増大・メモリを整理するコストが増大・メモリを整理するコストが増大→→→→GCGCGCGC停止時間が増える停止時間が増える停止時間が増える停止時間が増える
デデデデメリット解消??メリット解消??メリット解消??メリット解消??
34
・・・・JSJSJSJSででででGCGCGCGCモドキを実装してみたモドキを実装してみたモドキを実装してみたモドキを実装してみた
・デメリット解消にはトレードオフがある。・デメリット解消にはトレードオフがある。・デメリット解消にはトレードオフがある。・デメリット解消にはトレードオフがある。
・・・・GCGCGCGCがちょっとわかったがちょっとわかったがちょっとわかったがちょっとわかった
まとめ・・・まとめ・・・まとめ・・・まとめ・・・
35
ありがとうございました。ありがとうございました。ありがとうございました。ありがとうございました。
Heroku : http://deep-journey-7210.heroku.com/
Github : https://github.com/ueda82/GC_on_Javascript
36
φφ((((((((・・・・・・・・ωωωωωωωω・・・・・・・・)OK)OK)OK)OK)OK)OK)OK)OK♪♪♪♪♪♪♪♪
ハードウェアハードウェアハードウェアハードウェアハードウェアハードウェアハードウェアハードウェア
メモリ確保メモリ確保メモリ確保メモリ確保
OS
PG言語・言語・言語・言語・GC
プログラムプログラムプログラムプログラム
この大きさのメモリこの大きさのメモリこの大きさのメモリこの大きさのメモリくださいくださいくださいください
変数保存して変数保存して変数保存して変数保存して
XXXXXXXX番地に保存したから番地に保存したから番地に保存したから番地に保存したから
保存したよ保存したよ保存したよ保存したよ