SlideShare a Scribd company logo
1 of 77
#rubykaigi 03
nari/@nari3/authorNari
Network Applied Communication Laboratory
2013/05/31
Ruby's GC 2.0
Self-introduction
➔nari, @nari3, authorNari
➔A CRuby committer
➔GC entertainer
➔“Nakamura”
– is the most powerful clan in Ruby World
I went to Cebu in Philippines
➔I studied English a month.
➔But I can't speak English....
Because I was always alone
Because I'm shy
Today's Agenda
➔Non-recursive Marking
➔Bitmap Marking
– My work in Ruby 2.0.0
What is GC ?
GC collects all
dead objects
What is a dead
object?
What is a dead object?
➔A dead object is an object that is
no longer referenced by the
program
➔In GC terms, we say a that dead
object is unreachable from Roots
What is Roots?
➔Roots is a set of pointers that
directly reference objects in the
program.
– e.g. Ruby's local variables, etc..
What is GC ?
GC collects objects
that are unreachable
from Roots.
CRuby's GC
Summary
CRuby's GC
➔Mark&Sweep
➔Mark phase
– mark all live(reachable) objects
➔Sweep phase
– free up all dead(unreachable) objects
– Unmark all marked objects
[]
Root
@mami
'Leg' []
'Body' []
@mami = nil
@mami = ['Leg']
@mami[1] = ['Body']
@mami[1][1] = ['Head']
'Head'
@mami[1].pop #=> ['Head']
GC.start
[]
Root
@mami
'Leg' []
'Body' []
'Head'
Mark phase
[]
'Leg' []
'Body'
mark
mark
mark
mark all live(reachable) objects
[]
Root
@mami
'Leg' []
'Body' []
'Head'
Sweep phase
[]
'Leg' []
[]'Body'
unmark
unmark unmark
unmark
free
Free all dead(unreachable) objects
Unmark all marked objects
You can buy a GC book at
RubyKaigi!!
with autograph :)
http://d.hatena.ne.jp/mnishikawa/20100508/1273411900
Please don't throw this away
Non-recursive
Marking
Introduction of
Recursive Marking
(a traditional way in CRuby)
Recursive Marking
An object graph Machine Stack
gc_mark()
gc_mark()
gc_mark()
Frame
gc_mark()
gc_mark()
gc_mark()
Recursive call
A bad case of a
simple recursive call
Recursive Marking
A deep object graph
gc_mark()
gc_mark()
gc_mark()
Frame
gc_mark()
gc_mark()
gc_mark()
gc_mark()
・
・
・
Max
Suddenly
SEGV
Overflow!!
Machine Stack
In order to avoid a
stack overflow,
CRuby adopted ...
Knuth's
Algorithm
Photo: http://www.cs.cuw.edu/museum/History.html
What's a Knuth's Algorithm?
➔To avoid a stack overflow
➔There is a fail-safe system which
consists of two stages.
– Using a marking buffer
– Rescanning all objects
Using a marking buffer
A
gc_mark()
gc_mark()
Frame gc_mark()
・
・
・
Max
Machine Stack
B
D E
C
F
G
・・・
Marking buffer
B C
A
CB
push push
Avoding overflow!!
Marking all objects of the
marking buffer at the end
of the mark phaseA
Frame gc_mark()
Machine Stack
B
D E
C
F
G
・・・
Marking buffer
B C
A
CB
gc_mark()
rescan rescan
D E F
G
How do you deal with
an overflow of the
marking buffer?
Rescanning all objects
A
B
D E
C
F
G
・・・
Marking buffer
S O
A
CB
overflow!!
R A HIgnoring
rescan rescan
rescan
D E F
G
It's very slow!!
There are two
problems
1. fail-safe system is slow
➔Rescanning is so slow.
– If you have some deep object graphs,
GC may be always slow with
rescanning.
2. We can't precisely check
stack overflow
➔There is a trade-off between speed
and precision.
– Marking will be slow if we check stack
overflow in each gc_mark().
– So we checked it at the appropriate
time.
– But, it's not precise.
2. We can't precisely check
stack overflow
➔This causes SEGV in the worst case
scenario
– For instance, Fiber sometimes fails
unexpectedly.
– Fiber uses small machine stack(128 KB)
– At times, checking for stack overflows
doesn't work well with Fiber.
So I decided to say
good bye to Knuth
Non-recursive
Marking
Non-recursive Marking
➔Marking w/o the machine stack
– w/ own Array based stack
➔Recursive => Iterative
Rescanning all objects
A
B
D E
C
F
G
Stack chunk B
A
CB
F
G
mark
C
mark
F
mark
G
mark
mark
Marking stack
Allocating new
a stack chunk
A
B
D E
C
F
G
Marking stack
X
A
CB
F
G
X
mark
X X X X DStack chunk
E Allocate!
Pros and Cons
➔Pros
– Good-bye complex fail-safe systems
– Good-bye SEGV!
➔Cons
– Fast enough?
– There is a risk of allocating a stack
chunk during GC
mark benchmark OPTS="-r 5"
https://gist.github.com/authorNari/3806667
vm3_gc
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
origin
non-recursive
bm_gc_deep.rb
https://gist.github.com/authorNari/3812118
depth=240 depth=500
0
2
4
6
8
10
12
14
16
origin
non-recursive
(sec)
In fact, Ruby 1.9.3
has backported this
patch :-)
You can buy a GC book at
RubyKaigi!!
Bitmap
Marking
Bitmap Marking in CRuby
➔Mark-bits separate from object
headers
– for CoW friendly
➔REE has adopted this approach
– Since 2008
– But we can't import this patch
What's CopyOnWrite?
(Unix)
Process 1
(P1)
Page table
Memory Space
fork()
Process 2
(P2)
Page table
At first, P1 and P2 use
same memory space.
What's CopyOnWrite?
(Unix)
Process 1
(P1)
Page table
Memory Space
fork()
Process 2
(P2)
Page table
write
P1 private use P2 private use
copy
If we have many forked processes
Process 1
Shared
Process 2
P1 P2
Process 3 Process 4 ・・・
copy
P3 P4
write
・・・
Increase memory usage of all forked processes
Marking in the old way
… 16KB …Object
… 16KB …Object
・
・
・
mb mb mb mb mb mb mb
Ruby Heap
HeapBlock 1
(HB)
HeapBlock 2
GC.start
… 16KB …Object
… 16KB …Object
・
・
・
Ruby Heap
mb mb mb mb mb mb mb
write write write write
HeapBlock 1
(HB)
HeapBlock 2
This Marking is
CoW not friendly!!
Memory SpaceHB1 HB2 HB3
Process 1 Process 2
GC.start!!
write write write
copy
HB2HB1 HB3
Bitmap Marking
Mark-bits are separated from the heap
… 16KB …Object
… 16KB …Object
・
・
・
mb mb mb mb mb mb mb
Ruby Heap
HeapBlock 1
HeapBlock 2
Bitmap
header
header
This Marking is
CoW friendly!!
Memory SpaceHB1 HB2 HB3
Process 1 Process 2
GC.start!!
write
copy
BM
Bitmap Bitmap
decrease!!
BitmapMarking
makes prefork server
happy!
e.g. Unicorn
w/ marking in the old way
Memory SpaceHB1 HB2
UP1(parent) UP2(child)
GC.start!!
read only
write
copy
・・・
Rails Rails app
read/write
app
write write
Rails Rails
e.g. Unicorn
w/ BitmapMarking
Memory SpaceHB1 HB2
UP1(parent) UP2(child)
GC.start!!
read only
write
copy
・・・
Rails Rails app
read/write
app
write
Rails
Bitmap Bitmap
How do you find an
appropriate bit in
Bitmap?
Finding an appropriate
bit for an object
… 16KB …HB 1 mark
Bitmap
Header
16KB align
(low 13 bits must be 0)
Allocate a heap block using memory align
& ~0x3fff
HB1
mark
…
How do you allocate
aligned memory?
Allocating aligned memory
➔Using posix_memalign()
– For Unix-like OS
➔Using _aligned_malloc()
– For Windows OS
– mingw: __mingw_aligned_malloc()
Allocating aligned memory
➔Using malloc()
● Thanks to yugui-san's help!
– For other environments
– For instance, Max OS X Lion and so on
– It allocates 32KB and returns an address
which is a multiple of 16KB
● 16KB memory space is wasted
● We should use mmap(), but ....
The structure of
Ruby Heap was
changed.
The structure of Heap in Ruby 1.8
Object
heaps
Object
heap block
Object
Object
heap block
header
header
slot
・
・
・
・
・
・
The structure of Heap in Ruby 2.0
heaps
slot
freelist
freelist
Each slot has a freelist
Benchmark
skkzipcode
https://github.com/authorNari/skkzipcode
shared memory private memory
0
50
100
150
200
250
origin
bmap
(MB)
You can buy a GC book at
RubyKaigi!!
Future
Other plans
➔Introduce new obj_(alloc/free)
events to TracePont.
➔mmap()/munmap()
rgengc
ko1-san deserves praise!
http://www.flickr.com/photos/recompile_net/4612052730
Conclusion
Conclusion
➔I implemented Non-recursive
Marking and Bitmap Marking.
➔Rgengc is so cooooool!
Thank you!

More Related Content

What's hot

20140626 red dotrubyconf2014
20140626 red dotrubyconf201420140626 red dotrubyconf2014
20140626 red dotrubyconf2014Hiroshi SHIBATA
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesHiroshi SHIBATA
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014Hiroshi SHIBATA
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04Hiroshi SHIBATA
 
TRICK2013 Results
TRICK2013 ResultsTRICK2013 Results
TRICK2013 Resultsmametter
 
The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013Charles Nutter
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
 
Migrate to JRuby
Migrate to JRubyMigrate to JRuby
Migrate to JRubyIan Yang
 
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)SATOSHI TAGOMORI
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02Hiroshi SHIBATA
 
Hijacking Ruby Syntax in Ruby
Hijacking Ruby Syntax in RubyHijacking Ruby Syntax in Ruby
Hijacking Ruby Syntax in RubySATOSHI TAGOMORI
 
あまり知られていないRubyの便利機能
あまり知られていないRubyの便利機能あまり知られていないRubyの便利機能
あまり知られていないRubyの便利機能Kazuhiro Nishiyama
 
Griffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainGriffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainDanno Ferrin
 
MacRuby & HotCocoa
MacRuby & HotCocoaMacRuby & HotCocoa
MacRuby & HotCocoaThilo Utke
 

What's hot (20)

20140626 red dotrubyconf2014
20140626 red dotrubyconf201420140626 red dotrubyconf2014
20140626 red dotrubyconf2014
 
From 'Legacy' to 'Edge'
From 'Legacy' to 'Edge'From 'Legacy' to 'Edge'
From 'Legacy' to 'Edge'
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
20140918 ruby kaigi2014
20140918 ruby kaigi201420140918 ruby kaigi2014
20140918 ruby kaigi2014
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard Libraries
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04
 
TRICK2013 Results
TRICK2013 ResultsTRICK2013 Results
TRICK2013 Results
 
The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013The Future of JRuby - Baruco 2013
The Future of JRuby - Baruco 2013
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
 
What's new in RubyGems3
What's new in RubyGems3What's new in RubyGems3
What's new in RubyGems3
 
Migrate to JRuby
Migrate to JRubyMigrate to JRuby
Migrate to JRuby
 
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)Hijacking Ruby Syntax in Ruby (RubyConf 2018)
Hijacking Ruby Syntax in Ruby (RubyConf 2018)
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 
tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02tDiary annual report 2009 - Sapporo Ruby Kaigi02
tDiary annual report 2009 - Sapporo Ruby Kaigi02
 
Hijacking Ruby Syntax in Ruby
Hijacking Ruby Syntax in RubyHijacking Ruby Syntax in Ruby
Hijacking Ruby Syntax in Ruby
 
あまり知られていないRubyの便利機能
あまり知られていないRubyの便利機能あまり知られていないRubyの便利機能
あまり知られていないRubyの便利機能
 
Griffon - Making Swing Fun Again
Griffon - Making Swing Fun AgainGriffon - Making Swing Fun Again
Griffon - Making Swing Fun Again
 
MacRuby & HotCocoa
MacRuby & HotCocoaMacRuby & HotCocoa
MacRuby & HotCocoa
 

Viewers also liked

G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」Narihiro Nakamura
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみるchonaso
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみたchonaso
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法Narihiro Nakamura
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞いDi Ai
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Yuichi Sakuraba
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフNarihiro Nakamura
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるNarihiro Nakamura
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)Narihiro Nakamura
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考えるchonaso
 

Viewers also liked (19)

CRubyGCの並列世界
CRubyGCの並列世界CRubyGCの並列世界
CRubyGCの並列世界
 
G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」G1GCへ伸びていた「いばらの道」
G1GCへ伸びていた「いばらの道」
 
GC FAQ
GC FAQGC FAQ
GC FAQ
 
RUBYLAND
RUBYLANDRUBYLAND
RUBYLAND
 
GC黄金時代
GC黄金時代GC黄金時代
GC黄金時代
 
Fxxking gc.c
Fxxking gc.cFxxking gc.c
Fxxking gc.c
 
第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる第九回渋谷Java RaspberryPi+Javaを試してみる
第九回渋谷Java RaspberryPi+Javaを試してみる
 
第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた第七回 渋谷Java - Apache Shiroを使ってみた
第七回 渋谷Java - Apache Shiroを使ってみた
 
GC本をGCしないための100の方法
GC本をGCしないための100の方法GC本をGCしないための100の方法
GC本をGCしないための100の方法
 
Symbol GC
Symbol GCSymbol GC
Symbol GC
 
Java hotspot vmに おけるGCの振る舞い
Java hotspot vmにおけるGCの振る舞いJava hotspot vmにおけるGCの振る舞い
Java hotspot vmに おけるGCの振る舞い
 
Rubyによる本気のGC
Rubyによる本気のGCRubyによる本気のGC
Rubyによる本気のGC
 
Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編Javaのプログラムはどうやって動いているの? GC編
Javaのプログラムはどうやって動いているの? GC編
 
地獄のGC本スピンオフ
地獄のGC本スピンオフ地獄のGC本スピンオフ
地獄のGC本スピンオフ
 
われわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできるわれわれは、GCをX倍遅くできる
われわれは、GCをX倍遅くできる
 
円環の理(Garbage Collection)
円環の理(Garbage Collection)円環の理(Garbage Collection)
円環の理(Garbage Collection)
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
 
第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える第六回渋谷Java Java8のJVM監視を考える
第六回渋谷Java Java8のJVM監視を考える
 
Java8勉強会
Java8勉強会Java8勉強会
Java8勉強会
 

Similar to Ruby's GC 20

3 Flink Mistakes We Made So You Won't Have To
3 Flink Mistakes We Made So You Won't Have To3 Flink Mistakes We Made So You Won't Have To
3 Flink Mistakes We Made So You Won't Have ToHostedbyConfluent
 
Taming Go's Memory Usage — and Avoiding a Rust Rewrite
Taming Go's Memory Usage — and Avoiding a Rust RewriteTaming Go's Memory Usage — and Avoiding a Rust Rewrite
Taming Go's Memory Usage — and Avoiding a Rust RewriteScyllaDB
 
Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccsrisatish ambati
 
Garbage collection 介紹
Garbage collection 介紹Garbage collection 介紹
Garbage collection 介紹kao kuo-tung
 
Low pause GC in HotSpot
Low pause GC in HotSpotLow pause GC in HotSpot
Low pause GC in HotSpotjClarity
 
Writing NetBSD Sound Drivers in Haskell
Writing NetBSD Sound Drivers in HaskellWriting NetBSD Sound Drivers in Haskell
Writing NetBSD Sound Drivers in HaskellKiwamu Okabe
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Conguest29922
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015Chris Fregly
 
Sun jdk 1.6内存管理 -实现篇 -毕玄
Sun jdk 1.6内存管理 -实现篇 -毕玄Sun jdk 1.6内存管理 -实现篇 -毕玄
Sun jdk 1.6内存管理 -实现篇 -毕玄锐 张
 
«Большие объёмы данных и сборка мусора в Java
«Большие объёмы данных и сборка мусора в Java«Большие объёмы данных и сборка мусора в Java
«Большие объёмы данных и сборка мусора в JavaOlga Lavrentieva
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanJimin Hsieh
 
Migrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMigrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMariaDB plc
 
Debugging Rails 3 Applications
Debugging Rails 3 ApplicationsDebugging Rails 3 Applications
Debugging Rails 3 ApplicationsNathan Broadbent
 
Optimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at LocalyticsOptimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at Localyticsandrew311
 
week5_giveup_pwn.pdf
week5_giveup_pwn.pdfweek5_giveup_pwn.pdf
week5_giveup_pwn.pdfssuser83af16
 
High Performance Managed Languages
High Performance Managed LanguagesHigh Performance Managed Languages
High Performance Managed LanguagesJ On The Beach
 
[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep DiveAkihiro Suda
 

Similar to Ruby's GC 20 (20)

3 Flink Mistakes We Made So You Won't Have To
3 Flink Mistakes We Made So You Won't Have To3 Flink Mistakes We Made So You Won't Have To
3 Flink Mistakes We Made So You Won't Have To
 
Taming Go's Memory Usage — and Avoiding a Rust Rewrite
Taming Go's Memory Usage — and Avoiding a Rust RewriteTaming Go's Memory Usage — and Avoiding a Rust Rewrite
Taming Go's Memory Usage — and Avoiding a Rust Rewrite
 
Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svcc
 
Kanban Vs Scrum
Kanban Vs ScrumKanban Vs Scrum
Kanban Vs Scrum
 
Garbage collection 介紹
Garbage collection 介紹Garbage collection 介紹
Garbage collection 介紹
 
Low pause GC in HotSpot
Low pause GC in HotSpotLow pause GC in HotSpot
Low pause GC in HotSpot
 
Writing NetBSD Sound Drivers in Haskell
Writing NetBSD Sound Drivers in HaskellWriting NetBSD Sound Drivers in Haskell
Writing NetBSD Sound Drivers in Haskell
 
How MongoDB works
How MongoDB worksHow MongoDB works
How MongoDB works
 
2009 Eclipse Con
2009 Eclipse Con2009 Eclipse Con
2009 Eclipse Con
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015
 
Sun jdk 1.6内存管理 -实现篇 -毕玄
Sun jdk 1.6内存管理 -实现篇 -毕玄Sun jdk 1.6内存管理 -实现篇 -毕玄
Sun jdk 1.6内存管理 -实现篇 -毕玄
 
«Большие объёмы данных и сборка мусора в Java
«Большие объёмы данных и сборка мусора в Java«Большие объёмы данных и сборка мусора в Java
«Большие объёмы данных и сборка мусора в Java
 
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala TaiwanScala & Spark(1.6) in Performance Aspect for Scala Taiwan
Scala & Spark(1.6) in Performance Aspect for Scala Taiwan
 
All The Little Pieces
All The Little PiecesAll The Little Pieces
All The Little Pieces
 
Migrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at FacebookMigrating from InnoDB and HBase to MyRocks at Facebook
Migrating from InnoDB and HBase to MyRocks at Facebook
 
Debugging Rails 3 Applications
Debugging Rails 3 ApplicationsDebugging Rails 3 Applications
Debugging Rails 3 Applications
 
Optimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at LocalyticsOptimizing MongoDB: Lessons Learned at Localytics
Optimizing MongoDB: Lessons Learned at Localytics
 
week5_giveup_pwn.pdf
week5_giveup_pwn.pdfweek5_giveup_pwn.pdf
week5_giveup_pwn.pdf
 
High Performance Managed Languages
High Performance Managed LanguagesHigh Performance Managed Languages
High Performance Managed Languages
 
[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive[KubeCon EU 2020] containerd Deep Dive
[KubeCon EU 2020] containerd Deep Dive
 

More from Narihiro Nakamura

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、RubyやめるってよNarihiro Nakamura
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることNarihiro Nakamura
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝ってNarihiro Nakamura
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできることNarihiro Nakamura
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Narihiro Nakamura
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Narihiro Nakamura
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフNarihiro Nakamura
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_objectNarihiro Nakamura
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileNarihiro Nakamura
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るかNarihiro Nakamura
 

More from Narihiro Nakamura (14)

桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできることシャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
 
GC生誕50周年を祝って
GC生誕50周年を祝ってGC生誕50周年を祝って
GC生誕50周年を祝って
 
GC本のツクリカタ
GC本のツクリカタGC本のツクリカタ
GC本のツクリカタ
 
シャイなRubyistにできること
シャイなRubyistにできることシャイなRubyistにできること
シャイなRubyistにできること
 
Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会Railsハイパー実践講座-第35回NaCl勉強会
Railsハイパー実践講座-第35回NaCl勉強会
 
Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会Androidの中身-第26回NaCl社内勉強会
Androidの中身-第26回NaCl社内勉強会
 
RubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフRubyのGC改善による私のエコライフ
RubyのGC改善による私のエコライフ
 
絶対復習について
絶対復習について絶対復習について
絶対復習について
 
AlgorithmDesign01
AlgorithmDesign01AlgorithmDesign01
AlgorithmDesign01
 
make of MiniGC
make of MiniGCmake of MiniGC
make of MiniGC
 
本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object本当は怖いObjectSpace.each_object
本当は怖いObjectSpace.each_object
 
Talk In Point Of Gc Once In While
Talk In Point Of Gc Once In WhileTalk In Point Of Gc Once In While
Talk In Point Of Gc Once In While
 
Rubyはゲームの夢を見るか
Rubyはゲームの夢を見るかRubyはゲームの夢を見るか
Rubyはゲームの夢を見るか
 

Recently uploaded

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 

Recently uploaded (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 

Ruby's GC 20