[Feature #2471] want to choose a GC algorithm

Feature #2471: want to choose a GC algorithm
http://redmine.ruby-lang.org/issues/show/2471

e$B5/I<<Te(B: _ wanabe
e$B%9%F!<%?%9e(B: Open, e$BM%@hEYe(B: Normal
e$B%+%F%4%je(B: core, Target version: 1.9.2

GC
e$B$N%"%k%4%j%:%`$rJ#?tMQ0U$7$F!"A*Br2DG=$K$9$k$N$O$I$&$G$7$g$&$+!#e(B
e$B%Q%C%A$rE:IU$7$^$9!#$?$?$-Bf$K$7$F$$$?$@$1$l$P9,$$$G$9!#e(B

e$BABrBP>]$H$7$F!“e(BauthorNari e$B$5$s$Ne(B LazySweep
http://www.narihiro.info/resource/patch/rb_gc_lazy_improve.diff
e$B$r;H$o$;$F$$$?$@$-$^$7$?!#$”$j$,$H$&$4$6$$$^$9!#e(B
e$B5/F0;~$K4D6-JQ?te(B RUBYGC e$B$Ke(B lazy e$B$rBeF~$7$F$
$/$3$H$Ge(B
LazySweep e$B$,M-8z$K$J$j$^$9!#e(B

e$B%3%s%Q%$%k;~$Ke(B NOSELECT_GC
e$BDj?t$rDj5A$9$k$3$H$GL58z$K$9$k$3$H$b2DG=$G$9!#e(B
e$B4X?t%]%$%s%?$r;2>H$9$k$o$:$+$JCY1d$,5v$;$J$$?M8~$1$K0l1~MQ0U$7$^$7$?$,!“e(B
e$BE,@Z$Ke(B GC
e$B$rA*Br$9$k$J$i$P$”$^$jLdBj$K$J$i$J$$$N$G$O$J$$$+$H;W$$$^$9!#e(B

e$BABrBP>]$H$7$F!“e(BauthorNari e$B$5$s$Ne(B LazySweep
http://www.narihiro.info/resource/patch/rb_gc_lazy_improve.diff
e$B$r;H$o$;$F$$$?$@$-$^$7$?!#$”$j$,$H$&$4$6$$$^$9!#e(B
e$B5/F0;~$K4D6-JQ?te(B RUBYGC e$B$Ke(B lazy e$B$rBeF~$7$F$
$/$3$H$Ge(B LazySweep e$B$,M-8z$K$J$j$^$9!#e(B

e$B%3%s%Q%$%k;~$Ke(B NOSELECT_GC e$BDj?t$rDj5A$9$k$3$H$GL58z$K$9$k$3$H$b2DG=$G$9!#e(B
e$B4X?t%]%$%s%?$r;2>H$9$k$o$:$+$JCY1d$,5v$;$J$$?M8~$1$K0l1~MQ0U$7$^$7$?$,!“e(B
e$BE,@Z$Ke(B GC e$B$rA*Br$9$k$J$i$P$”$^$jLdBj$K$J$i$J$$$N$G$O$J$$$+$H;W$$$^$9!#e(B

[e$BC&@~%?%$%`%9%?!<%He(B]

e$B$[$H$s$I$N%f!<%6$O<+J,$N%o!<%/%m!<%I$K:GE,$Je(BGCe$B$rA*$V==J,$J>pJs$re(B
e$B;}$C$F$$$J$$$N$G!“%(%s%I%f!<%6;kE@$G$O$”$^$j0UL#$,$J$$3HD%$K;W$($^$9!#e(B
e$B$^$?!“%*!<%W%s%=!<%9$N@-<A$H$7$F0B0W$J%o!<%/%”%i%&%s%I$rMQ0U$9$k$HE,@Z$Je(B
e$B%U%#!<%I%P%C%/$,JV$C$F$3$J$/$J$k$N$G%G%U%)%k%He(BGCe$B$N2~A1$,CY$l$k$H$$$&e(B
e$B%j%9%/$,$"$j$^$9!#e(B

e$B$3$l$OC/$,$&$l$7$/$J$k$3$H$r0U?^$7$F$$$k%Q%C%A$J$N$G$7$g$&$+!)e(B

e$B%o%J%Y$H?=$7$^$9!#e(B

09/12/10 KOSAKI Motohiro [email protected]:

Feature #2471: want to choose a GC algorithm
GC e$B$N%"%k%4%j%:%`$rJ#?tMQ0U$7$F!"A*Br2DG=$K$9$k$N$O$I$&$G$7$g$&$+!#e(B

e$B$[$H$s$I$N%f!<%6$O<+J,$N%o!<%/%m!<%I$K:GE,$Je(BGCe$B$rA*$V==J,$J>pJs$re(B
e$B;}$C$F$$$J$$$N$G!“%(%s%I%f!<%6;kE@$G$O$”$^$j0UL#$,$J$$3HD%$K;W$($^$9!#e(B
e$B$^$?!“%*!<%W%s%=!<%9$N@-<A$H$7$F0B0W$J%o!<%/%”%i%&%s%I$rMQ0U$9$k$HE,@Z$Je(B
e$B%U%#!<%I%P%C%/$,JV$C$F$3$J$/$J$k$N$G%G%U%)%k%He(BGCe$B$N2~A1$,CY$l$k$H$$$&e(B
e$B%j%9%/$,$"$j$^$9!#e(B

e$B$3$l$OC/$,$&$l$7$/$J$k$3$H$r0U?^$7$F$$$k%Q%C%A$J$N$G$7$g$&$+!)e(B

GC e$B$KA4A3>$7$/$J$$$N$G!“30$7$?;v$r=q$$$F$7$^$C$?$i$9$_$^$;$s!#e(B
e$BNc$($P!”%“%/%7%g%s%2!<%`$re(B Ruby e$B$G:n$j$?$$>l9g$Oe(B LazySweep
e$B$r;XDj$7$?$[$&$,$$$$e(B
e$B$H$$$&$h$&$JDj@P$H$7$F9-$^$k$HLLGr$$!”$H9M$($F$$$^$7$?!#e(B
e$B$=$&$$$C$?J}$,$I$l$@$1$$$k$+CN$j$^$;$s$,!#e(B

e$B$H$$$&$N$,7zA0$G!“K\2;$Oe(B GC
e$B3+H/<T$*$h$S$=$NK54Q<T$K4r$7$$$H$$$&$N$,Bg$-$$$G$9!#e(B
e$B!J$3$NK54Q<T$O!“e(BGC
e$B$K6=L#$,$”$k$1$l$I$b<j$O=P$;$J$$;d$N$h$&$J?M$r;X$7$^$9!#!Ke(B
e$B8@$o$l$F$_$k$H3N$+$K!”%G%U%)%k%He(B GC
e$B$N2~A1$NCY$l$K$D$J$,$k2DG=@-$OH]Dj$G$-$^$;$s!#e(B
e$B$7$+$7!"BhFs!"Bh;0$Ne(B GC e$B$N2~A1$K$O$D$J$,$j$^$9!#e(B

e$BA0=R$Ne(B LazySweep
e$B$rNc$K<h$l$P!";n$7$?$$>l9g$O<+J,$G%Q%C%A$rEv$F$J$1$l$P$J$i$:!“e(B
e$B3hH/$K3+H/$5$l$F$$$ke(B trunk e$B$KDI?o$9$k$N$O$+$J$jLLE]$G$7$?!#e(B
e$B$=$N$?$a9-$/$O;H$o$l$:!J<:Ni$J8@$$J}$G$9$_$^$;$s!K!”$=$N7k2Le(B nari
e$B$5$s$,e(B
e$B%G%P%C%0Ey$[$!J$9$Y$F!)!K$*0l?M$G40@.$5$;$?$b$N$HG’<1$7$F$$$^$9!#e(B

e$B$I$NLL$K$*$$$F$b%G%U%)%k%H$Ne(B GC e$B$rD6$($ke(B GC
e$B$,$5$C$H$G$-$l$P$=$l$G$$$$$N$G$9$,e(B
e$B$I$3$+$KITMx$JE@$,$“$k$HK:NMQ$H$O$J$i$:!”>e$N$h$&$K;H$o$l$:2~A1$bCY$l$^$9!#e(B

e$B$3$l$G$O$“$^$j$KHs8zN(E*$J$N$G!”%l%]%8%H%j$K$N$;$F5$7Z$K;n$;$k$h$&$K$7e(B
e$B$=$3$G9-$/%G%P%C%0$7$?$[$&$,$$$$$N$G$O$J$$$+!“$H$$$&$N$,<q;]$G$9!#e(B
e$B$=$&$7$F$$$:$l%G%U%)%k%H$,CV$-49$($i$l$k$+$b$7$l$^$;$s$7!”$=$&$G$b$J$$$+$b$7$l$^$;$s!#e(B
e$BCV$-49$($i$l$J$+$C$?$H$7$F$b!“0lHV:G=i$K5s$2$?$h$&$KM-MQ$J6ILL$,e(B
Tips e$BE*$K9-$^$l$Pe(B
e$B$=$l$O$=$l$G2ACM$,$”$k$H;W$$$^$9!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:39867] Re: [Feature #2471] want to choose a GC
algorithm”
on Fri, 11 Dec 2009 00:02:42 +0900, Narihiro N.
[email protected] writes:

|e$B$?$@!“e(BGCe$B<+BN$N2~A1!J9bB.2=Ey!K$H$$$&4QE@$G8+$k$H!”:#$^$G$Ne(BCRubye$B$Ne(BGCe$B$O$=e(B
|e$B$l$[$IBg$-$J2~A1$O$J$5$l$F$$$J$$$N$G!"FC$K$3$N%Q%C%A$,F~$k$3$H$K$h$C$F!“e(B
|e$B$5$i$K2~A1$,CY$/$J$k$H$$$&$3$H$b$J$$$N$G$O$J$$$+$H;W$$$^$9!#e(B
|e$B5U$Ke(BLazySweepe$B$,>e<j$/0i$C$F$/$l$l$P!”%G%U%)%k%H$Ne(BGCe$B$K<h$C$FBe$o$k$H$$$&e(B
|e$B$N$bLLGr$$$+$b$7$l$^$;$s!#e(B

e$B$C$F$$$&$+!“e(BLazySweepe$B$C$F!V<h$C$FBe$o$k!W$h$&$JBg$-$J%”%k%4%je(B
e$B%:%`$NJQ99$G$O$J$$$H;W$$$^$9!#$“$^$jBg$-$J%H%l!<%I%*%U$b$J$5e(B
e$B$=$&$J$N$G!”$A$c$s$H%P%0$,<h$l$?$J$i$$$D$bM-8z$K$7$F$$$F$b$he(B
e$B$$$h$&$J!#e(B

e$B$=$&$$$&0UL#$G$O!“e(BLazySweepe$B$,e(Bon/offe$B$G$-$k$3$H$N%a%j%C%H$,ITL@e(B
e$B$J$N$G!”$3$N%Q%C%A$K$O;?@.$7$^$;$s!#$3$l$,e(Bcopy-on-write
friendly GCe$B$H$+e(Bmostly-copying GCe$B$N$h$&$J@-G=FC@-$,Bg$-$/JQ$oe(B
e$B$j$=$&$J$b$N$J$i!“@Z$jBX$($K0UL#$,$”$k$+$b$7$l$^$;$s!#e(B

GCe$B$K$D$$$F$O!"e(B

  • e$B$5$5$@$/$s$N$H$3$m$N%a%b%j%"%m%1!<%7%g%s$Ke(Bmmape$B$r;H$&2~A1e(B
  • e$B$=$N1~MQ$H$7$F$N%S%C%H%^%C%W%^!<%-%s%0e(B
  • LazySweep

e$B$,$H$j$"$($:M-K>$=$&$J2~A1$@$H;W$$$^$9!#:#8e$N2]Bj$H$7$F$Oe(B

  • multi threadede$B$Je(Bsweep
  • e$B1-@n$5$s$N$H$3$m$Ne(Bmostly-copying GC
  • e$B%i%$%H%P%j%"$NF3F~e(B

e$B$J$I$,9M$($i$l$^$9$,!"$3$l$i$O2r7h$9$Y$-2]Bj$,$^$@$^$@B?$=$&e(B
e$B$G$9!#e(B

                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

narie$B$G$9!#e(B

GCe$B$HJ9$$$FMh$^$7$?!#e(B

2009e$BG/e(B12e$B7ne(B10e$BF|e(B9:54 KOSAKI Motohiro
[email protected]:
(snip)

e$BE,@Z$Ke(B GC e$B$rA*Br$9$k$J$i$P$"$^$jLdBj$K$J$i$J$$$N$G$O$J$$$+$H;W$$$^$9!#e(B

[e$BC&@~%?%$%`%9%?!<%He(B]

e$B$[$H$s$I$N%f!<%6$O<+J,$N%o!<%/%m!<%I$K:GE,$Je(BGCe$B$rA*$V==J,$J>pJs$re(B
e$B;}$C$F$$$J$$$N$G!“%(%s%I%f!<%6;kE@$G$O$”$^$j0UL#$,$J$$3HD%$K;W$($^$9!#e(B

[e$B;d$b$A$g$C$HC&@~$7$^$9!De(B]

e$B;d$O%“%W%j%1!<%7%g%s$K$h$C$F%f!<%6$,e(BGCe$B$rA*Br$G$-$k$3$H$K0UL#$,$”$k$H;We(B
e$B$$$^$9!#$J$<$J$i!“$9$Y$F$Ne(BGCe$B%”%k%4%j%:%$K$O0lD90lC;$,$"$j!"%"%W%j%1!<e(B e$B%7%g%s$K$h$C$F$Oe(BGCe$B%"%k%4%j%:%<+BN$r<h$jBX$($?J}$,$h$$%1!<%9$,3N<B$K$"e(B
e$B$k$+$i$G$9!#e(B

e$B!V$[$H$s$I$N%f!<%6$O:GE,$Je(BGCe$B$rA*$V==J,$J>pJs$r$b$C$F$$$J$$!W$H$$$&$h$je(B
e$B$b!V>pJs$rF@$h$&$H$7$J$$!W$H$$$&$N$,@5$7$$$N$G$O$J$$$G$7$g$&$+!#$=$N$he(B
e$B$&$J%f!<%6$K$H$C$Fe(BGCe$B$N%“%k%4%j%:%`$OFC$K4X78$J$/!”!Ve(BGCe$B$5$($“$l$PK~B-!We(B
e$B$H$$$&5$;}$A$J$N$@$HA[A|$7$^$9!#e(B
e$B$3$N$h$&$J%f!<%6$K$H$C$Fe(BGCe$B$NABr@-$O$^$C$?$/0UL#$O$J$$$G$7$g$&!#$?$@!"e(B
GCe$B$NA
Br@-$K$h$k32$,$”$k$+$H$$$&$H!"$=$l$b$J$$5$$,$7$^$9!#e(B

GCe$B$,A*Br$G$-$F4r$7$$%f!<%6$H$$$&$N$O!“<B:]$Ke(BGCe$B$K$h$C$F:$$C$?>uBV$K4Y$Ce(B
e$B$F$$$k%f!<%6$@$H;W$$$^$9!#Nc$($P!”%j%"%k%?%$%@-$r5a$a$k%"%W%j%1!<%7%ge(B e$B%s$Ge(BGCe$B$Ne(BStopTheWorlde$B$K6l$7$s$G$$$k$H$+!D!#$=$N$H$-!"%f!<%6$,5$7Z$Ke(BGCe$B$Ne(B e$B%"%k%4%j%:%$rJQ99$G$-$k$N$O$h$$$3$H$@$H;W$$$^$9!#e(B

e$B$^$?!“%*!<%W%s%=!<%9$N@-<A$H$7$F0B0W$J%o!<%/%”%i%&%s%I$rMQ0U$9$k$HE,@Z$Je(B
e$B%U%#!<%I%P%C%/$,JV$C$F$3$J$/$J$k$N$G%G%U%)%k%He(BGCe$B$N2~A1$,CY$l$k$H$$$&e(B
e$B%j%9%/$,$"$j$^$9!#e(B

e$B$“!”$J$k$[$I!#$=$N$h$&$JB&LL$b$“$k$N$G$9$M!#$?$7$+$K!”%f!<%6$+$i$N%P%0e(B
e$B$NH/8+$J$I$OCY$l$=$&$G$9$M!#%F%9%H$bFq$7$=$&$G$9!#e(BHotspotVMe$B$J$s$+$Oe(B4e$B8De(B
e$B$/$i$$$N$^$C$?$/0c$&e(BGCe$B%“%k%4%j%:%`$,F~$C$F$$$^$9$,!”$"$l$b%a%s%F%J%s%9e(B
e$B$,BgJQ$=$&$G$9$M!J%^%s%Q%o!<$,0c$&$N$G$7$g$&$+!D!K!#e(B

e$B$?$@!“e(BGCe$B<+BN$N2~A1!J9bB.2=Ey!K$H$$$&4QE@$G8+$k$H!”:#$^$G$Ne(BCRubye$B$Ne(BGCe$B$O$=e(B
e$B$l$[$IBg$-$J2~A1$O$J$5$l$F$$$J$$$N$G!"FC$K$3$N%Q%C%A$,F~$k$3$H$K$h$C$F!“e(B
e$B$5$i$K2~A1$,CY$/$J$k$H$$$&$3$H$b$J$$$N$G$O$J$$$+$H;W$$$^$9!#e(B
e$B5U$Ke(BLazySweepe$B$,>e<j$/0i$C$F$/$l$l$P!”%G%U%)%k%H$Ne(BGCe$B$K<h$C$FBe$o$k$H$$$&e(B
e$B$N$bLLGr$$$+$b$7$l$^$;$s!#e(B

nari e$B$G$9!#e(B

2009e$BG/e(B12e$B7ne(B11e$BF|e(B1:14 Yukihiro M.
[email protected]:

e$B$C$F$$$&$+!“e(BLazySweepe$B$C$F!V<h$C$FBe$o$k!W$h$&$JBg$-$J%”%k%4%je(B
e$B%:%`$NJQ99$G$O$J$$$H;W$$$^$9!#$“$^$jBg$-$J%H%l!<%I%*%U$b$J$5e(B
e$B$=$&$J$N$G!”$A$c$s$H%P%0$,<h$l$?$J$i$$$D$bM-8z$K$7$F$$$F$b$he(B
e$B$$$h$&$J!#e(B

e$B$=$&$$$&0UL#$G$O!“e(BLazySweepe$B$,e(Bon/offe$B$G$-$k$3$H$N%a%j%C%H$,ITL@e(B
e$B$J$N$G!”$3$N%Q%C%A$K$O;?@.$7$^$;$s!#$3$l$,e(Bcopy-on-write
friendly GCe$B$H$+e(Bmostly-copying GCe$B$N$h$&$J@-G=FC@-$,Bg$-$/JQ$oe(B
e$B$j$=$&$J$b$N$J$i!“@Z$jBX$($K0UL#$,$”$k$+$b$7$l$^$;$s!#e(B

e$B$J$k$[$I!#3N$+$K$=$&$G$9$M!#e(B
LazySweepe$B$N%Q%C%A$O%P%0$,<h$l$F$$$?$H;W$&$N$G!“e(Btrunke$B$K9g$o$;$?e(B
e$B$b$N$r:n$C$F!”:FEYe(BMLe$B$KEj9F$7$^$9!#e(B

e$B%A%1%C%He(B #2471 e$B$,99?7$5$l$^$7$?!#e(B (by _ wanabe)

e$B%9%F!<%?%9e(B Assignede$B$+$ie(BRejectede$B$KJQ99e(B

LazySweep
e$B$G$O%9%k!<%W%C%H$,A}Bg$9$k$H$$$&OC$r$I$3$+$GJ9$$$?3P$($,$“$C$Fe(B
e$B$=$l$,M}M3$Ge(B trunk e$B$KF~$i$J$$$N$+$H;W$C$F$$$^$7$?!#e(B
e$BF~$i$J$+$C$?$N$OC1$K%P%0$NLdBj$G!”$9$G$K2r7h$5$l$F$$$k$H$$$&$3$H$J$N$Ge(B
e$B%A%1%C%H$Oe(B Reject
e$B$5$;$F$$$?$@$-$^$9!#$"$j$,$H$&$4$6$$$^$7$?!#e(B

http://redmine.ruby-lang.org/issues/show/2471

e$B%A%1%C%He(B #2471 e$B$,99?7$5$l$^$7$?!#e(B (by _ wanabe)

e$B%U%!%$%ke(B extgc.patch e$BDI2Ce(B
e$B%9%F!<%?%9e(B Rejectede$B$+$ie(BOpene$B$KJQ99e(B
Target version 1.9.2e$B$+$ie(B1.9.xe$B$KJQ99e(B

e$B$:$$$V$sA0$N%A%1%C%H$G$9$_$^$;$s$,!"<q;]$,F1$8$J$N$Ge(Breopen
e$B$5$;$FD:$-$^$9!#e(B

copy-on-write friendly GCe$B$H$+e(Bmostly-copying GCe$B$N$h$&$J@-G=FC@-$,Bg$-$/JQ$oe(B
e$B$j$=$&$J$b$N$J$i!“@Z$jBX$($K0UL#$,$”$k$+$b$7$l$^$;$s!#e(B

e$B$H$N$3$H$J$N$G!“e(BBitmapMarking e$B$G%Q%C%A$r=q$$$F$_$^$7$?!#e(B
e$BA02s$HF1$8$/e(B nari
e$B$5$s$N<BAu$r;H$o$;$F$$$?$@$-$^$7$?!#$”$j$,$H$&$4$6$$$^$9!#e(B
e$B$^$?!"@EE*%j%s%/$;$:$K3HD%%i%$%V%i%j$HF1$8e(B .so
e$B7A<0$G%m!<%I$9$k$h$&$K$7$^$7$?!#e(B
e$BNc$($Pe(B ruby -I .ext/i686-linux -G gc_bmp test.rb
e$B$J$I$H$9$k$HFI$_9~$^$l$k$H;W$$$^$9!#e(B
prelude e$BA0$K3NDj$5$;$J$1$l$P$J$i$J$$$N$G!"e(Bgem
e$B$N%m!<%I%Q%9$K$OBP1~$G$-$^$;$s$G$7$?!#e(B

rb_gc_load
e$B$rI.F,$K<BAu$,$$$m$$$m$R$I$$$N$G!“@0M}$7$F$+$i$H;W$C$F$$$?$N$G$9$,e(B
e$B<+J,$G$O$3$l0J>e$I$&$9$k$3$H$b$G$-$J$=$&$J$N$G$H$j$”$($:%A%1%C%H$H$7$F;D$5$;$FD:$-$^$9!#$9$_$^$;$s!#e(B

http://redmine.ruby-lang.org/issues/show/2471