Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mark Compact GC in MRI
Search
Aaron Patterson
June 13, 2017
Technology
1.3k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mark Compact GC in MRI
My presentation about Mark Compact GC in MRI for GitHub Constellation Tokyo
Aaron Patterson
June 13, 2017
More Decks by Aaron Patterson
See All by Aaron Patterson
Faster FFI for Ruby
tenderlove
0
52
RubyKaigi 2025: Class New, A New Approach
tenderlove
0
260
RubyKaigi Dev Meeting 2025
tenderlove
1
5.5k
Speeding up Instance Variables in Ruby 3.3
tenderlove
2
570
[Feature #20425] Speeding up delegate methods
tenderlove
3
360
RailsConf 2023
tenderlove
30
1.5k
Don't @ Me! Faster Instance Variables with Object Shapes
tenderlove
1
560
RailsConf 2022 Keynote
tenderlove
2
680
Some Assembly Required
tenderlove
1
640
Other Decks in Technology
See All in Technology
AI駆動開発におけるQAエンジニアの役割事例 〜AI駆動開発の現場から〜
kobayashiyorimitsu
0
340
AI時代における最適なQA組織の作り方
ymty
3
400
攻撃者がいなくてもAIエージェントはインシデントを起こす
nomizone
0
200
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
1
210
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
190
背中から、背中へ /paying forward to community
naitosatoshi
0
230
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
1
1k
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
150
次世代ランサムウェア対策の考察 / 20260704 Mitsutoshi Matsuo
shift_evolve
PRO
5
1.7k
20260702_生成AIはどこまで成長するのか_チャットだけじゃない世界
doradora09
PRO
0
100
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
1
1.3k
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
1.8k
Featured
See All Featured
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
870
A Soul's Torment
seathinner
6
3k
Balancing Empowerment & Direction
lara
6
1.2k
Amusing Abliteration
ianozsvald
1
220
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Spectacular Lies of Maps
axbom
PRO
1
850
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Ethics towards AI in product and experience design
skipperchong
2
320
For a Future-Friendly Web
brad_frost
183
10k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Transcript
How people build software ! " Mark Compact GC in
MRI
How people build software ! ͜Μʹͪʂʂʂ 2
How people build software ! ࣗݾհ 3
How people build software ! ΞʔϩϯͰ͢ɻ! 4
How people build software ! ˏtenderlove 5
How people build software ! ! ˏtenderlove 6
How people build software ! ఱက͕େ͖Ͱɺ 7 ఱကϥϒΛݺΜͰ͍͍Ͱ͢
How people build software ! Ruby Core Team Rails Core
Team 8
How people build software ! ຊޠೳྗࢼݧ 9
How people build software ! ೣɺೋඖ 10
How people build software ! 11 SEATAC Airport Facebook YouTube
How people build software ! 12
How people build software ! 13 Gorbachev Puff Puff Thunderhorse
ΰϒͪΌΜ
How people build software ! GitHub ͷࣾһ 14
How people build software ! Ruby & Rails Developer 15
How people build software ! GitHub & OSS 16
How people build software ! ! GitHub Core Values 17
• Collaboration • Empathy • Quality • Positive Impact • Shipping
How people build software ! Collaboration 18 !
How people build software ! Empathy 19 !
How people build software ! Quality 20 !
How people build software ! Positive Impact 21 !
How people build software ! Shipping 22 !
How people build software ! GitHub ❤ OSS 23 !
How people build software ! GitHub & OSS 24 !
How people build software ! Mark / Compact GC 25
How people build software ! Mark / Compact GC 26
How people build software ! ! Roadmap 27 Ξϩέʔγϣϯ ίϨΫγϣϯ
ίϯύΫτ
How people build software ! Ξϩέʔγϣϯ 28
How people build software ! ! Ξϩέʔγϣϯ 29 def hoge
loop do Object.new end end hoge
How people build software ! Ξϩέʔγϣϯ GCͷ 30
How people build software ! `rb_newobj` in gc.c 31
How people build software ! ! ϝϞϦྖҬͷϨΠΞτ 32 ώʔϓྖҬ ϖʔδ
ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ ϖʔδ Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! Free Space = "Fast Path"
33
How people build software ! New Page = "Slow Path"
34
How people build software ! ! ϖʔδͷϨΠΞτ 35 ϖʔδ FREE
FREE FREE FREE FREE FREE FREE FREE FREE FREE SLOTS Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! ! ϖʔδͷϨΠΞτ 36 ϖʔδ FREE
FREE FREE FREE FREE FREE FREE FREE FREE FREE SLOTS Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! ཁ 37
How people build software ! heap has_many :pages 38
How people build software ! page has_many :slots 39
How people build software ! slot.is_a?(Empty) || slot.is_a?(Object) 40
How people build software ! ίϨΫγϣϯ 41
How people build software ! ϚʔΫεΠʔϓ GC Mark Sweep GC
42 !
How people build software ! ϚʔΫεΠʔϓͷ ΞϧΰϦζϜ 43
How people build software ! ! Tree of Objects 44
Root A B C D a = [ { c: 'd' } ] Ruby Array Hash String Symbol
How people build software ! ! Tree of Objects 45
Root A B C D a = [ { c: 'd' } ] a = nil Ruby
How people build software ! ϚʔΫɹεΠʔϓ 46 ͔ͩΒʮϚʔΫεΠʔϓʯɹ tenderlove
How people build software ! ! Mark Phase 47 Root
D A B C F E H G
How people build software ! ! Mark Phase 48 Root
D A B C F E H G
How people build software ! ! Mark Phase 49 Root
D A B C F E H G
How people build software ! ! Mark Phase 50 Root
D A B C F E H G
How people build software ! Incremental / Lazy 51
How people build software ! ίϯύΫγϣϯͷؔ 52
How people build software ! ! Free Space 53 ϖʔδ
FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj ϖʔδ FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj ϖʔδ FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! ! Free Space 54 FREE
FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! ! Free Space 55 FREE
FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj FREE FREE FREE FREE FREE FREE FREE FREE FREE FREE Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj Obj
How people build software ! ΦϒδΣΫτҠಈग़དྷͳ͍ 56
How people build software ! ίϯύΫγϣϯͱ 57
How people build software ! github.com/github/ruby/tree/gc-compact 58
How people build software ! ίϯύΫγϣϯͷ ΞϧΰϦζϜ 59
How people build software ! "2 Finger Compaction" 60 ☝
☝
How people build software ! ! Compaction Steps 61 ΦϒδΣΫτͷҠಈ
ϦϑΝϨϯεͷߋ৽
How people build software ! ! ΦϒδΣΫτͷҠಈ 62 1 2
3 4 5 6 7 8 9 a b Free Free Free Obj Free Obj Obj Obj Free Free Obj ☝ ☝ Free Pointer Scan Pointer 1 2 3 5 Done! Address Heap
How people build software ! ! ΦϒδΣΫτҠಈͷલ 63 1 2
3 4 5 6 7 8 9 a b Free Free Free Obj Free Obj Obj Obj Free Free Obj Address Heap a = { c: 'd' } Ruby {} :c 'd'
How people build software ! ! ΦϒδΣΫτҠಈͷޙ 64 1 2
3 4 5 6 7 8 9 a b Obj Free Obj Obj Obj Free Free Obj Address Heap a = { c: 'd' } Ruby {} :c 'd' 1 2 3 5
How people build software ! ! ϦϑΝϨϯεͷߋ৽ 65 1 2
3 4 5 6 7 8 9 a b Obj Obj Obj Obj Free Free Obj Address Heap a = { c: 'd' } Ruby {} :c 'd' 1 2 3 5 ☝ Done!
How people build software ! ! ϦϑΝϨϯεͷߋ৽ 66 1 2
3 4 5 6 7 8 9 a b Obj Obj Obj Obj Free Free Obj Address Heap a = { c: 'd' } Ruby {} :c 'd' 1 2 3 5 Free Free Free Free
How people build software ! ίϯύΫτྃʂʂ 67
How people build software ! ίϯύΫγϣϯͷ 68
How people build software ! ! ී௨ͷϦϑΝϨϯε 69 Hash Symbol
String C code
How people build software ! ! C֦ுͷϦϑΝϨϯε 70 Hash Symbol
String C code rb_gc_mark ෆҠಈ Ҡಈ Ҡ ಈ
How people build software ! άϩόϧม 71
How people build software ! ! file.c in MRI 72
separator = rb_obj_freeze(rb_usascii_str_new2("/")); /* separates directory parts in path */ rb_define_const(rb_cFile, "Separator", separator); rb_define_const(rb_cFile, "SEPARATOR", separator); static VALUE rb_file_s_join(VALUE klass, VALUE args) { return rb_file_join(args, separator); } άϩόϧม
How people build software ! ! άϩόϧม - SEGV 73
$ ruby -e'File::Separator = File::SEPARATOR = nil; GC.start; File.join("a", "b")' # BOOM $ jruby -e'File::Separator = File::SEPARATOR = nil; GC.start; File.join("a", "b")'
How people build software ! General Problem 74
How people build software ! ݁Ռ 75
How people build software ! Rails Heap 76
How people build software ! ! Compaction Code 77 GC.start
File.open("pre_compact.json", "wb") { |f| ObjectSpace.dump_all(output: f) } GC.start p GC.compact GC.start File.open("post_compact.json", "wb") { |f| ObjectSpace.dump_all(output: f) } $ ruby bin/rails r script.rb
ίϯύΫτͷલ F U P Pages Number of slots 0 100
200 300 400
ίϯύΫτͷޙ F U P Pages Number of slots 0 100
200 300 400
How people build software ! ίϯύΫτͷલ: 528 / 552 80
How people build software ! ίϯύΫτͷޙ: 167 / 552 81
How people build software ! ͰɺվળͰ͖·͢ 82
How people build software ! GitHub Heap Graphs 83
None
How people build software ! ·ͱΊ 85 !
How people build software ! Why Compact? 86 !
How people build software ! OSS Software https://github.com/github/ruby/tree/gc-compact 87 !
How people build software ! ͋Γ͕ͱ͏͍͟͝·͢ʂ 88
How people build software ! "