gc 擬(もどき)を js で書いてみた

37
1 GC GC GC GC 擬どき 擬どき 擬どき 擬どき JS JS JS JS で書いてた で書いてた で書いてた で書いてた @ @ @ꝏꜳ ꝏꜳ ꝏꜳ ꝏꜳ

Upload: toueda

Post on 18-Jul-2015

1.181 views

Category:

Technology


0 download

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

3

蛇口からウィスキー出ないからね蛇口からウィスキー出ないからね蛇口からウィスキー出ないからね蛇口からウィスキー出ないからね !!!!!!!!

4

・自己紹介・自己紹介・自己紹介・自己紹介

・・・・GCGCGCGCについてについてについてについて

・なぜ・なぜ・なぜ・なぜJSJSJSJSで作ろうと思ったのか?で作ろうと思ったのか?で作ろうと思ったのか?で作ろうと思ったのか?

・実装目標・実装目標・実装目標・実装目標

・デモっぽいもの・デモっぽいもの・デモっぽいもの・デモっぽいもの

✔✔✔✔✔✔✔✔

5

最初に・・・最初に・・・最初に・・・最初に・・・

資料が適当でごめんなさい資料が適当でごめんなさい資料が適当でごめんなさい資料が適当でごめんなさい

6

GCGCGCGCとは?とは?とは?とは?

ガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるガベージ(ゴミ)を集めて捨ててくれるプログラムのことプログラムのことプログラムのことプログラムのこと

すごく世話好きな人ですね。すごく世話好きな人ですね。すごく世話好きな人ですね。すごく世話好きな人ですね。

RubyRubyRubyRuby、、、、JavaJavaJavaJava、、、、JavaScriptJavaScriptJavaScriptJavaScriptPHPPHPPHPPHP、、、、PyhonPyhonPyhonPyhon、、、、LispLispLispLispとかに入ってるよとかに入ってるよとかに入ってるよとかに入ってるよ

7

・メモリ確保を・メモリ確保を・メモリ確保を・メモリ確保を自分自分自分自分でやるでやるでやるでやる・要らなくなったら・要らなくなったら・要らなくなったら・要らなくなったら自分自分自分自分で解放で解放で解放で解放

できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・できないとメモリ内がゴミだらけに・・・

居ないとありがたみに居ないとありがたみに居ないとありがたみに居ないとありがたみに初めて気づく・・・初めて気づく・・・初めて気づく・・・初めて気づく・・・

GCGCGCGCが居ないと・・・が居ないと・・・が居ないと・・・が居ないと・・・

8

RubyRubyRubyRubyコミッタのコミッタのコミッタのコミッタのNari3Nari3Nari3Nari3という人がという人がという人がという人が「「「「GCGCGCGC黄金時代黄金時代黄金時代黄金時代」」」」のタイトルでセッションのタイトルでセッションのタイトルでセッションのタイトルでセッションをされました。をされました。をされました。をされました。

最後に・・・最後に・・・最後に・・・最後に・・・「「「「GCGCGCGC本を書いてるんだよね」本を書いてるんだよね」本を書いてるんだよね」本を書いてるんだよね」「誰が買うんだ?」「誰が買うんだ?」「誰が買うんだ?」「誰が買うんだ?」

KOFKOFKOFKOF2009&関西2009&関西2009&関西2009&関西RubyRubyRubyRuby会議会議会議会議

9

Nari3「買ってくれる人 ノシ」

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ(・∀・)ノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノΣΣΣΣ((((゚゚゚゚ДДДД゚;≡;゚゚;≡;゚゚;≡;゚゚;≡;゚дддд゚゚゚゚))))

10

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ(・∀・)ノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ ((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ

((((・∀・・∀・・∀・・∀・))))ノノノノ((((゚゚゚゚дддд゚゚゚゚))))ノノノノ俺も買う俺も買う俺も買う俺も買う

Nari3「買ってくれる人 ノシ」

11

と言うことなのでと言うことなのでと言うことなのでと言うことなので

いろいろいろいろいろいろいろいろ察して察して察して察してくださいくださいくださいください

12

なんでなんでなんでなんでJSJSJSJSででででGCGCGCGCなんなんなんなん????

・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう

・・・・CCCC とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?

・・・・RubyRubyRubyRubyも考えたけども考えたけども考えたけども考えたけどWebWebWebWebで表示したいなで表示したいなで表示したいなで表示したいな

・・・・WEBWEBWEBWEBに出力するならに出力するならに出力するならに出力するならJSJSJSJSでいいやでいいやでいいやでいいやんんんん

13

なんでなんでなんでなんでJSJSJSJSででででGCGCGCGCなんなんなんなん????

GCGCGCGCににににGCGCGCGC載せる奴おらん載せる奴おらん載せる奴おらん載せる奴おらんやろやろやろやろネタ的にと美味しい!!ネタ的にと美味しい!!ネタ的にと美味しい!!ネタ的にと美味しい!!

・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう・せっかく本を読んだので作ってみよう

・・・・CCCC とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?とかメモリ管理面倒だしやめて(アレ?

・・・・RubyRubyRubyRubyも考えたけども考えたけども考えたけども考えたけどWebWebWebWebで表示したいなで表示したいなで表示したいなで表示したいな

・・・・WEBWEBWEBWEBに出力するならに出力するならに出力するならに出力するならJSJSJSJSでいいやでいいやでいいやでいいやんんんん

14

・プログラム書いて実行できる・プログラム書いて実行できる・プログラム書いて実行できる・プログラム書いて実行できる

・メモリの状況が一目で判る・メモリの状況が一目で判る・メモリの状況が一目で判る・メモリの状況が一目で判る

・・・・GCGCGCGCのタイミングをボタンで制御のタイミングをボタンで制御のタイミングをボタンで制御のタイミングをボタンで制御

・・・・bootstrapbootstrapbootstrapbootstrap ((((5zj5zj5zj5zjさんも使用!!)さんも使用!!)さんも使用!!)さんも使用!!)

実装目標実装目標実装目標実装目標

15

実装目標実装目標実装目標実装目標

プログラム 実行結果

GCの状態表示

Webページ

実行 GC

16

ここでなんと!!ここでなんと!!ここでなんと!!ここでなんと!!

17

NariNariNariNari3の3の3の3のblogblogblogblog2008200820082008年頃の記事・・・年頃の記事・・・年頃の記事・・・年頃の記事・・・

まさかのまさかのまさかのまさかのネタ被りネタ被りネタ被りネタ被り発覚発覚発覚発覚

18完全な勇み足でした完全な勇み足でした完全な勇み足でした完全な勇み足でした orzorzorzorz

19

気をとりなおして気をとりなおして気をとりなおして気をとりなおして

20

・マーク&スイープ・マーク&スイープ・マーク&スイープ・マーク&スイープGCGCGCGC

・・・・RubyRubyRubyRubyでも使用されてるよでも使用されてるよでも使用されてるよでも使用されてるよ

・考え方は簡単・考え方は簡単・考え方は簡単・考え方は簡単markmarkmarkmarkフェイズフェイズフェイズフェイズsweepsweepsweepsweep(掃除)フェイズ(掃除)フェイズ(掃除)フェイズ(掃除)フェイズ

GCGCGCGCのアルゴリズムのアルゴリズムのアルゴリズムのアルゴリズム

21

もうちょっと詳しくもうちょっと詳しくもうちょっと詳しくもうちょっと詳しく

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

フリーリストに追加フリーリストに追加フリーリストに追加フリーリストに追加

26こんな感じになりましたこんな感じになりましたこんな感じになりましたこんな感じになりました

27

実際に動かしてみます実際に動かしてみます実際に動かしてみます実際に動かしてみます

http://deep-journey-7210.heroku.com/

http://t.co/wO305Gk7

28

・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの・空きメモリと欲しいメモリの大きさが一致するとは限らない大きさが一致するとは限らない大きさが一致するとは限らない大きさが一致するとは限らない

・空きメモリの検索コストが増える・空きメモリの検索コストが増える・空きメモリの検索コストが増える・空きメモリの検索コストが増える

デデデデメリットメリットメリットメリット

フラグメンテーションフラグメンテーションフラグメンテーションフラグメンテーション

29

ヒントは身近にあるよヒントは身近にあるよヒントは身近にあるよヒントは身近にあるよ

皆さんよくご存知のあのツール皆さんよくご存知のあのツール皆さんよくご存知のあのツール皆さんよくご存知のあのツール

デデデデメリットを解消してみようメリットを解消してみようメリットを解消してみようメリットを解消してみよう

30

デデデデメリットを解消してみようメリットを解消してみようメリットを解消してみようメリットを解消してみよう

デデデデ ++++ フラグメンテーションフラグメンテーションフラグメンテーションフラグメンテーション

31

再びデモ・・・・再びデモ・・・・再びデモ・・・・再びデモ・・・・

http://deep-journey-7210.heroku.com/

http://t.co/wO305Gk7

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番地に保存したから番地に保存したから番地に保存したから番地に保存したから

保存したよ保存したよ保存したよ保存したよ

37

φφ((((((((・・・・・・・・ωωωωωωωω・・・・・・・・)OK)OK)OK)OK)OK)OK)OK)OK♪♪♪♪♪♪♪♪

ハードウェアハードウェアハードウェアハードウェアハードウェアハードウェアハードウェアハードウェア

メモリお掃除メモリお掃除メモリお掃除メモリお掃除

OS

PG言語・言語・言語・言語・GC

プログラムプログラムプログラムプログラム

XXXXXXXX番もういらない番もういらない番もういらない番もういらない XXXXXXXX番地開放したよ番地開放したよ番地開放したよ番地開放したよ