SlideShare a Scribd company logo
1 of 21
Download to read offline
ガベージコレクションの
    アルゴリズムと実装

         By うえだ
ガベージコレクションの
    アルゴリズムと実装

         By うえだ

 話が壮大過ぎてムリ
新題!!
「ガベージコレクションのアルゴリズムと実装」
を読んでJSで偽GCつくってみたので
を読んでJSで偽GCつくってみたので
    JSで偽GC
喋らしてください。


Rubyとの関連→
自己紹介
・うえだ @to_ueda
・minami.rbではお酒の会係
          ではお酒の会係
・ウィスキーの国から引越しした


     ・ ・     を少し書けるよ
・Ruby・JS・Javaを少し書けるよ
内容
 ・ガベージコレクション(GC)とは?
 ・ガベージコレクション( )とは?
 ・なんでJSなの?
 ・なんで なの?
 ・GCアルゴリズムについて
    アルゴリズムについて
 ・デモ


 難しいことはしゃべれません
GCとは?
GCとは?
プログラムに代わりメモリの管理する仕組み
 ・必要なメモリの確保
 ・いらないメモリのお掃除


Ruby、Java、
Ruby、Java、JavaScript
PHP、Pyhon、
PHP、Pyhon、Lisp
とかに使われてるよ


                 ※勝手なイメージ像です
内容
✔・ガベージコレクション( )とは?
 ・ガベージコレクション(GC)とは?
 ・なんでJSなの?
 ・なんで なの?
 ・GCアルゴリズムについて
    アルゴリズムについて
 ・デモ
なぜGC JSで
なぜGCをJSで?
  GCを
 ・せっかく本を読んだので作ってみよう
   言語とかわかんないし
 ・C言語とかわかんないし
      も考えたけどGUIとか面倒
 ・Rubyも考えたけど
      も考えたけど   とか面倒
     に出力するなら最初からJSで・・・
 ・WEBに出力するなら最初から で・・・
     に出力するなら最初から

GCの上にGC載せる奴おらんやろ
GCの上にGC載せる奴おらんやろ
  の上にGC載せる奴おらん
    ・・・ネタ的においしい
さんのblog
               さんの
           Nariさんの
               年頃の記事
           2008年頃の記事




・・・と
これを見るまでは思ってました。
ネタだだ被りですやん
ネタだだ被りですやん
  だだ被りです
内容
✔・ガベージコレクション( )とは?
 ・ガベージコレクション(GC)とは?

✔・なんで なの?
 ・なんでJSなの?
 ・ GCアルゴリズムについて
     アルゴリズムについて
 ・デモ
実装したGCについて
実装したGCについて
    GC
 ・マーク&スイープGC
 ・マーク&スイープ

      にも使われてるらしい
 ・Rubyにも使われてるらしい

 ・考え方は簡単
       フェイズ
   markフェイズ
        (掃除)フェイズ
   sweep(掃除)フェイズ
もうちょっと詳しく
markフェイズ
markフェイズ
                           root

メモリ

obj   obj    obj   obj   obj      obj   obj   obj   obj   obj
 1     2      3     4     5        6     7     8     9    10




            rootさんあなたが必要なのは誰ですか?
                                                          root
                     3 と 6 は必要。
markフェイズ
markフェイズ
                          root



obj   obj   obj   obj   obj      obj   obj   obj   obj   obj
 1     2     3     4     5        6     7     8     9    10




            3と6さん必要なのはありますか?                              obj
                                                           3

                        私は特になし
                                                           obj
                                                            6
                   僕は4と8 が必要
sweepフェイズ
sweepフェイズ
                          root



obj   obj   obj   obj   obj      obj   obj   obj   obj   obj
 1     2     3     4     5        6     7     8     9    10




            全員に聞いたから残りはいらないわね
sweepフェイズ
sweepフェイズ
                        root



     obj   obj    obj          obj       obj
 1                      5            7         9   10
      2     3      4            6         8




                 空きは1,5,7,9,10 ね
内容
✔・ガベージコレクション( )とは?
 ・ガベージコレクション(GC)とは?

✔・JSでGCを実装してみたよ
    で を実装してみたよ

✔・GCアルゴリズムについて
     アルゴリズムについて
 ・デモ
デモします。
http://deep-journey-7210.heroku.com/
まとめ・・・
まとめ・・・
・GC本を読んだ
   本を読んだ

・Nariさんは偉大でした
     さんは偉大でした

・実際作るとたくさん問題が起きて
 理解度が増しました。

・なんとかデモに間に合いました。
ありがとうございました。


Heroku : http://deep-journey-7210.heroku.com/
 Github : https://github.com/ueda82/GC_on_Javascript

More Related Content

What's hot

Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Masaya Konishi
 
Devsumi2012フィードバック オープニング
Devsumi2012フィードバック オープニングDevsumi2012フィードバック オープニング
Devsumi2012フィードバック オープニングRakuten Group, Inc.
 
zshはいいぞ。 【限界LT #0】
zshはいいぞ。 【限界LT #0】zshはいいぞ。 【限界LT #0】
zshはいいぞ。 【限界LT #0】liquid oxygen
 
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) 私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) parrotstudio
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope高広 内山
 
Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利Yutaka Tachibana
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方三七男 山本
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Sugawara Genki
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)三七男 山本
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景Ryunosuke SATO
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + NashornTakuya Ueda
 
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて   第16回 岡山ruby, ruby on rails勉強会Mrubyについて   第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会Masaya Konishi
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」Muyuu Fujita
 
出会い駆動コミュニティー
出会い駆動コミュニティー出会い駆動コミュニティー
出会い駆動コミュニティーyoku0825
 
Rancher Meetup Tokyo #7 Rancher Home
Rancher Meetup Tokyo #7 Rancher HomeRancher Meetup Tokyo #7 Rancher Home
Rancher Meetup Tokyo #7 Rancher HomeTetsurou Yano
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development についてよしだ あつし
 

What's hot (20)

Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
 
Devsumi2012フィードバック オープニング
Devsumi2012フィードバック オープニングDevsumi2012フィードバック オープニング
Devsumi2012フィードバック オープニング
 
zshはいいぞ。 【限界LT #0】
zshはいいぞ。 【限界LT #0】zshはいいぞ。 【限界LT #0】
zshはいいぞ。 【限界LT #0】
 
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) 私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope
 
Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利
 
Wakayama.rbボードの使い方
Wakayama.rbボードの使い方Wakayama.rbボードの使い方
Wakayama.rbボードの使い方
 
Gitを使ったRoute53の管理
Gitを使ったRoute53の管理Gitを使ったRoute53の管理
Gitを使ったRoute53の管理
 
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
 
コミュニティのある風景
コミュニティのある風景コミュニティのある風景
コミュニティのある風景
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + Nashorn
 
Scala.js
Scala.jsScala.js
Scala.js
 
Memcache Queue
Memcache QueueMemcache Queue
Memcache Queue
 
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて   第16回 岡山ruby, ruby on rails勉強会Mrubyについて   第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」
 
出会い駆動コミュニティー
出会い駆動コミュニティー出会い駆動コミュニティー
出会い駆動コミュニティー
 
Rancher Meetup Tokyo #7 Rancher Home
Rancher Meetup Tokyo #7 Rancher HomeRancher Meetup Tokyo #7 Rancher Home
Rancher Meetup Tokyo #7 Rancher Home
 
私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について私はいかにしてpull request を行ったか - あるいは social development について
私はいかにしてpull request を行ったか - あるいは social development について
 
社内Lt
社内Lt社内Lt
社内Lt
 
計算数学
計算数学計算数学
計算数学
 

Viewers also liked

山椒の味は大人の味
山椒の味は大人の味山椒の味は大人の味
山椒の味は大人の味Kouji Matsui
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate languageKouji Matsui
 
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へKouji Matsui
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式Kouji Matsui
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホンKouji Matsui
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばKouji Matsui
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions IIKouji Matsui
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions IIIKouji Matsui
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ ExtensionsKouji Matsui
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何Kouji Matsui
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしようKouji Matsui
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji Matsui
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITKouji Matsui
 

Viewers also liked (15)

山椒の味は大人の味
山椒の味は大人の味山椒の味は大人の味
山椒の味は大人の味
 
Hello! intermediate language
Hello! intermediate languageHello! intermediate language
Hello! intermediate language
 
抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ抽象太郎ものがたり そして伝説へ
抽象太郎ものがたり そして伝説へ
 
式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式式の体を成して無い式を式の体を成すように式と式木で何とかする式
式の体を成して無い式を式の体を成すように式と式木で何とかする式
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホン
 
メタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらばメタプログラミングでExcel仕様書よさらば
メタプログラミングでExcel仕様書よさらば
 
Final LINQ Extensions II
Final LINQ Extensions IIFinal LINQ Extensions II
Final LINQ Extensions II
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions III
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ Extensions
 
async/awaitダークサイド is 何
async/awaitダークサイド is 何async/awaitダークサイド is 何
async/awaitダークサイド is 何
 
これからの「async/await」の話をしよう
これからの「async/await」の話をしようこれからの「async/await」の話をしよう
これからの「async/await」の話をしよう
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN Linking
 
LINQ基本のキ
LINQ基本のキLINQ基本のキ
LINQ基本のキ
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
 

GC本読んでJSで偽GC作った