[Feature: trunk] GC.stat

e$B!!$5$5$@$G$9!%e(B

e$B!!8=:_$Ne(B GC e$B4XO"$N>uBV$rI=<($9$k$?$a$N%a%=%C%Ie(B GC.stat
e$B$rDI2C$9$k$N$O$Ie(B
e$B$&$G$7$g$&$+!%e(B

{:count=>1, # e$B$3$l$^$Ge(B GC e$B$,5/$3$C$?2s?te(B
:elapsed_time=>0.004, # e$B$3$l$^$Ge(B GC
e$B$K$+$+$C$?%f!<%6;~4Ve(B
:heap_used=>20, # e$BMxMQCf$Ne(B heap e$B$N?te(B
:heap_length=>22, # e$B3NJ]$7$?e(B heap e$B$N?te(B
:heap_live_slot=>4742, # e$B@8$-$F$$$ke(B slot e$B$N?te(B (*1)
:heap_free_slot=>5056, # e$B6u$$$F$$$ke(B slot e$B$N?te(B (*1)
:heap_waiting_finalize_slot=>23} # e$B%U%!%$%J%i%$%6$rBT$C$F$$$ke(B
slot e$B$N?te(B

*1: e$B0lHV:G8e$Ne(B GC e$B$G%+%&%s%H!%e(B

Gauche e$B$G$Oe(B gc-stat e$B$H$$$&$b$N$,$"$k!$$He(B shiro

e$B$5$s$KJ9$$$?$b$N$G!%e(B
gosh> (gc-stat)
((:total-heap-size 786432) (:free-bytes 163840) (:bytes-since-gc 532376)
(:total-bytes 532352))

Index: gc.c

— gc.c (e$B%j%S%8%g%se(B 23689)
+++ gc.c (e$B:n6H%3%T!<e(B)
@@ -323,6 +323,9 @@ typedef struct rb_objspace {
size_t length;
size_t used;
size_t longlife_used;

  • size_t total_live_slot;
  • size_t total_free_slot;
  • size_t total_waiting_finalize_slot;
    RVALUE *freelist;
    RVALUE *longlife_freelist;
    RVALUE *range[2];
    @@ -355,7 +358,8 @@ typedef struct rb_objspace {
    double invoke_time;
    } profile;
    struct gc_list *global_list;
  • unsigned int count;
  • size_t count;
  • double elapsed_time;
    int gc_stress;
    } rb_objspace_t;

@@ -933,7 +937,8 @@ assign_heap_slot(rb_objspace_t *objspace
if (lomem == 0 || lomem > p) lomem = p;
if (himem < pend) himem = pend;
if (lifetime == lifetime_longlife) objspace->heap.longlife_used++;

  • heaps_used++;
  • objspace->heap.used++;

  • objspace->heap.total_free_slot += objs;

    while (p < pend) {
    p->as.free.flags = 0;
    @@ -1832,7 +1837,7 @@ static void
    gc_sweep(rb_objspace_t *objspace)
    {
    RVALUE *p, *pend, *final_list;

  • size_t freed = 0;
  • size_t freed = 0, waiting_finalize = 0;
    size_t i;
    size_t live = 0, free_min = 0, do_heap_free = 0;

@@ -1868,6 +1873,7 @@ gc_sweep(rb_objspace_t *objspace)
p->as.free.next = final_list;
final_list = p;
final_num++;

  •    waiting_finalize++;
    
    }
    else {
    add_freelist(objspace, &freelist, p);
    @@ -1877,6 +1883,7 @@ gc_sweep(rb_objspace_t objspace)
    else if (BUILTIN_TYPE§ == T_ZOMBIE) {
    /
    objects to be finalized /
    /
    do nothing remain marked */
  • waiting_finalize++;
    }
    else {
    RBASIC§->flags &= ~FL_MARK;
    @@ -1923,6 +1930,10 @@ gc_sweep(rb_objspace_t *objspace)
    free_unused_heaps(objspace);
    GC_PROF_SET_HEAP_INFO;
    }
  • objspace->heap.total_live_slot = live;
  • objspace->heap.total_free_slot = freed;
  • objspace->heap.total_waiting_finalize_slot = waiting_finalize;
    }

static void
@@ -2207,6 +2218,8 @@ garbage_collect(rb_objspace_t *objspace)
{
struct gc_list *list;
rb_thread_t *th = GET_THREAD();

  • double invoke_time = getrusage_time();

  • INIT_GC_PROF_PARAMS;

    if (GC_NOTIFY) printf(“start garbage_collect()\n”);
    @@ -2286,6 +2299,8 @@ garbage_collect(rb_objspace_t *objspace)

    GC_PROF_TIMER_STOP;
    if (GC_NOTIFY) printf(“end garbage_collect()\n”);

  • objspace->elapsed_time += getrusage_time() - invoke_time;

  • return Qtrue;
    }

@@ -2950,6 +2965,33 @@ gc_count(VALUE self)
return UINT2NUM((&rb_objspace)->count);
}

+/*

    • call-seq:
    • GC.stat -> Hash
      
    • Return information about GC.
    • It returns several information about GC:
    • total count, elapesed time, heap size, and so on.
  • */
    +static VALUE
    +gc_stat(VALUE self)
    +{
  • VALUE hash = rb_hash_new();
  • rb_objspace_t *objspace = &rb_objspace;
  • rb_hash_aset(hash, ID2SYM(rb_intern(“count”)),
    SIZET2NUM(objspace->count));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“elapsed_time”)),
    DBL2NUM(objspace->elapsed_time));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“heap_used”)),
    SIZET2NUM(objspace->heap.used));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“heap_length”)),
    SIZET2NUM(objspace->heap.length));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“heap_live_slot”)),
    SIZET2NUM(objspace->heap.total_live_slot));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“heap_free_slot”)),
    SIZET2NUM(objspace->heap.total_free_slot));
  • rb_hash_aset(hash, ID2SYM(rb_intern(“heap_waiting_finalize_slot”)),
    SIZET2NUM(objspace->heap.total_waiting_finalize_slot));
  • return hash;
    +}

#if CALC_EXACT_MALLOC_SIZE
/*

  • call-seq:
    @@ -3122,6 +3164,7 @@ Init_GC(void)
    rb_define_singleton_method(rb_mGC, “stress”, gc_stress_get, 0);
    rb_define_singleton_method(rb_mGC, “stress=”, gc_stress_set, 1);
    rb_define_singleton_method(rb_mGC, “count”, gc_count, 0);
  • rb_define_singleton_method(rb_mGC, “stat”, gc_stat, 0);
    rb_define_method(rb_mGC, “garbage_collect”, rb_gc_start, 0);

    rb_mProfiler = rb_define_module_under(rb_mGC, “Profiler”);

In article [email protected],
SASADA Koichi [email protected] writes:

e$B!!8=:_$Ne(B GC e$B4XO"$N>uBV$rI=<($9$k$?$a$N%a%=%C%Ie(B GC.stat e$B$rDI2C$9$k$N$O$Ie(B
e$B$&$G$7$g$&$+!%e(B

{:count=>1, # e$B$3$l$^$Ge(B GC e$B$,5/$3$C$?2s?te(B
:elapsed_time=>0.004, # e$B$3$l$^$Ge(B GC e$B$K$+$+$C$?%f!<%6;~4Ve(B
:heap_used=>20, # e$BMxMQCf$Ne(B heap e$B$N?te(B
:heap_length=>22, # e$B3NJ]$7$?e(B heap e$B$N?te(B
:heap_live_slot=>4742, # e$B@8$-$F$$$ke(B slot e$B$N?te(B (*1)
:heap_free_slot=>5056, # e$B6u$$$F$$$ke(B slot e$B$N?te(B (*1)
:heap_waiting_finalize_slot=>23} # e$B%U%!%$%J%i%$%6$rBT$C$F$$$ke(B slot e$B$N?te(B

heap e$B$H$$$&8l$O!“e(BRuby e$BFbIt$G$N0UL#$H$O0[$J$k0UL#$,0lHL$K;H$oe(B
e$B$l$F$$$k$N$G!”$o$+$j$K$/$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B!!$5$5$@$G$9!%e(B

Tanaka A. wrote::

{:count=>1, # e$B$3$l$^$Ge(B GC e$B$,5/$3$C$?2s?te(B
:elapsed_time=>0.004, # e$B$3$l$^$Ge(B GC e$B$K$+$+$C$?%f!<%6;~4Ve(B
:heap_used=>20, # e$BMxMQCf$Ne(B heap e$B$N?te(B
:heap_length=>22, # e$B3NJ]$7$?e(B heap e$B$N?te(B
:heap_live_slot=>4742, # e$B@8$-$F$$$ke(B slot e$B$N?te(B (*1)
:heap_free_slot=>5056, # e$B6u$$$F$$$ke(B slot e$B$N?te(B (*1)
:heap_waiting_finalize_slot=>23} # e$B%U%!%$%J%i%$%6$rBT$C$F$$$ke(B slot e$B$N?te(B

heap e$B$H$$$&8l$O!“e(BRuby e$BFbIt$G$N0UL#$H$O0[$J$k0UL#$,0lHL$K;H$oe(B
e$B$l$F$$$k$N$G!”$o$+$j$K$/$$$N$G$O$J$$$G$7$g$&$+!#e(B

e$B!!2?$,$$$$$G$7$g$&!%Nc$($P!$e(Bslot_length, …
e$B$H$+$K$7$F!$e(Blive_slot e$B$H$+e(B
e$B$K$9$k$H$+!%e(B

e$B!!$^$!!$e(Bheap* e$B$O!$=jA’e(B Ruby
e$B$N<BAu$rCN$C$F$k?M$7$+$o$+$i$J$$$N$G!$JL$K$$e(B
e$B$$$h$&$J5$$b$9$k$s$G$9$,!%Nc$($P!$e(BGC::Profiler
e$B$J$s$+$b!$CN$i$J$$$H$o$+e(B
e$B$i$J$$FbMF$J5$$,$7$^$9!%e(B

In article [email protected],
SASADA Koichi [email protected] writes:

e$B!!2?$,$$$$$G$7$g$&!%Nc$($P!$e(Bslot_length, … e$B$H$+$K$7$F!$e(Blive_slot e$B$H$+e(B
e$B$K$9$k$H$+!%e(B

e$B$J$K$,$$$$$G$9$+$M$'!#e(B

slot e$B$O!“e(BHEAP_MIN_SLOTS e$B$J$I$r$_$k$H!”%*%V%8%'%/%H$N>l=j$H$$e(B
e$B$&0UL#$G;H$o$l$F$$$F0c$&$s$8$c$J$$$+$H;W$$$^$9$,!#e(B

e$B!!$^$!!$e(Bheap* e$B$O!$=jA’e(B Ruby e$B$N<BAu$rCN$C$F$k?M$7$+$o$+$i$J$$$N$G!$JL$K$$e(B
e$B$$$h$&$J5$$b$9$k$s$G$9$,!%Nc$($P!$e(BGC::Profiler e$B$J$s$+$b!$CN$i$J$$$H$o$+e(B
e$B$i$J$$FbMF$J5$$,$7$^$9!%e(B

e$B8x3+$N%a%=%C%I$K$9$l$P!"e(BRuby e$B$N<BAu$rCN$i$J$$$R$H$,6=L#$r;}e(B
e$B$D$3$H$O=<J,$K9M$($i$l$k$G$7$g$&!#e(B

e$B<BAu$rCN$C$F$$$k$R$H$7$+$o$+$i$J$/$F$$$$$H$$$&$$$$$o$1$O!"$he(B
e$B$jDLMQ$7$K$/$/$J$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B!!$5$5$@$G$9!%e(B

Tanaka A. wrote::

slot e$B$O!“e(BHEAP_MIN_SLOTS e$B$J$I$r$_$k$H!”%*%V%8%’%/%H$N>l=j$H$$e(B
e$B$&0UL#$G;H$o$l$F$$$F0c$&$s$8$c$J$$$+$H;W$$$^$9$,!#e(B

e$B!!8+$F$k$H!$e(Bheap_slot e$B$H$$$&$H!$e(Bslot
e$B$N=89g$N$h$&$K;H$C$F$k46$8$G$9$M!%e(B

e$B!!e(BLisp e$B$J$s$+$@$H!$e(BCell e$B$J$s$F8@$$$^$9$1$I!$e(Blive cell
e$B$H$+$OJQ$J46$8$G$9e(B
e$B$h$M!%e(B(live|free)_slot e$B$O!$0-$/$J$$$h$&$J5$$,$7$^$9$,!%e(B

e$B!!$^$!!$e(Bheap* e$B$O!$=jA’e(B Ruby e$B$N<BAu$rCN$C$F$k?M$7$+$o$+$i$J$$$N$G!$JL$K$$e(B
e$B$$$h$&$J5$$b$9$k$s$G$9$,!%Nc$($P!$e(BGC::Profiler e$B$J$s$+$b!$CN$i$J$$$H$o$+e(B
e$B$i$J$$FbMF$J5$$,$7$^$9!%e(B

e$B8x3+$N%a%=%C%I$K$9$l$P!"e(BRuby e$B$N<BAu$rCN$i$J$$$R$H$,6=L#$r;}e(B
e$B$D$3$H$O=<J,$K9M$($i$l$k$G$7$g$&!#e(B

e$B<BAu$rCN$C$F$$$k$R$H$7$+$o$+$i$J$/$F$$$$$H$$$&$$$$$o$1$O!"$he(B
e$B$jDLMQ$7$K$/$/$J$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B!!8D?ME*$K$O!$$=$s$J$KJ,$+$j$E$i$$L>A0$8$c$J$$$H$O;W$$$^$9!%$h$j$h$$L>A0e(B
e$B$NDs0F$rD:$1$l$P!$$=$l$K1[$7$?$3$H$O$J$$$s$G$9$,!%e(B

e$B!!$3$l$r5!2q$K!$e(BRuby e$B<BAu$G$Ne(B GC
e$B$^$o$j$NMQ8l$N@0M}$H$+$r$7$F$b$i$($k$He(B
e$B?’!9$HJXMx$+$b$7$l$^$;$s!%e(B

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote::

e$B0l1~!"L>A0$rIU$1$?K?M$Oe(B

heap - e$B%%V%8%’%/%H$r@Z$j=P$7$FMh$k6u4Ve(B
slot - e$B@Z$j=P$7$F$-$?%
%V%8%’%/%He(B(e$B$NF~$lJ*e(B)

e$B$H$$$&%K%e%"%s%9$GL>A0IU$1$F$^$9!#e(B

e$B!!e(Bslot e$B$NG[Ns$re(B heape$B!$e(Bheap e$B$NG[Ns$re(B heaps
e$B!$$G$$$$$s$G$7$?$C$1!%e(B

e$B!!$=$&$9$k$H!$e(Bfree_slote$B!$e(Blive_slot
e$B!Je(Bactive_slote$B!K$O0-$/$J$$$h$&$J!%$=$be(B
e$B$=$be(B heap e$B$,7y$C$FOC!)e(B

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

In message “Re: [ruby-dev:38642] Re: [Feature: trunk] GC.stat”
on Tue, 16 Jun 2009 00:52:03 +0900, SASADA Koichi [email protected]
writes:

|e$B!!8+$F$k$H!$e(Bheap_slot e$B$H$$$&$H!$e(Bslot e$B$N=89g$N$h$&$K;H$C$F$k46$8$G$9$M!%e(B

e$B0l1~!"L>A0$rIU$1$?K?M$Oe(B

heap - e$B%%V%8%'%/%H$r@Z$j=P$7$FMh$k6u4Ve(B
slot - e$B@Z$j=P$7$F$-$?%
%V%8%'%/%He(B(e$B$NF~$lJ*e(B)

e$B$H$$$&%K%e%"%s%9$GL>A0IU$1$F$^$9!#e(B

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

In message “Re: [ruby-dev:38646] Re: [Feature: trunk] GC.stat”
on Tue, 16 Jun 2009 09:31:07 +0900, SASADA Koichi [email protected]
writes:

|e$B!!e(Bslot e$B$NG[Ns$re(B heape$B!$e(Bheap e$B$NG[Ns$re(B heaps e$B!$$G$$$$$s$G$7$?$C$1!%e(B

gc.ce$B$G$O$=$&$$$&L>A0$K$J$C$F$^$9!#e(B

|e$B!!$=$&$9$k$H!$e(Bfree_slote$B!$e(Blive_slot e$B!Je(Bactive_slote$B!K$O0-$/$J$$$h$&$J!%$=$be(B
|e$B$=$be(B heap e$B$,7y$C$FOC!)e(B

e$B0lHLE*$K$Oe(Bheape$B$H$$$&$N$O%a%b%j3d$jEv$F$G@Z$j=P$7$F$/$kNN0hA4e(B
e$BBN$r;X$9$N$G$O$J$$$+$H$$$&;XE&$@$H;W$$$^$9!#e(BGauchee$B$NNc$G$be(B
(heape$B$Ke(B)e$B3d$jEv$F$i$l$?%*%V%8%'%/%H$N?t$rJV$7$F$^$9$7!#e(B

Yukihiro M. wrote::

|e$B$=$be(B heap e$B$,7y$C$FOC!)e(B

e$B0lHLE*$K$Oe(Bheape$B$H$$$&$N$O%a%b%j3d$jEv$F$G@Z$j=P$7$F$/$kNN0hA4e(B
e$BBN$r;X$9$N$G$O$J$$$+$H$$$&;XE&$@$H;W$$$^$9!#e(BGauchee$B$NNc$G$be(B
(heape$B$Ke(B)e$B3d$jEv$F$i$l$?%*%V%8%’%/%H$N?t$rJV$7$F$^$9$7!#e(B

e$B!!$A$g$C$H9M$($?$N$G$9$,!$e(Bslot e$B$H$$$&$N$r!$e(Bobject_slot
e$B$H$$$&7A$GL@<($9e(B
e$B$l$P!$$"$^$j4V0c$$$h$&$,$J$$$H;W$&$N$G$9$,!$$I$&$G$7$g$&!%e(B

  • active_object_slot: e$B@8$-$F$k%*%V%8%’%/%H$,3JG<$5$l$F$$$ke(B slot
  • free_object_slot: e$B6u$-e(B slot
  • zombie_object_slot: e$B%U%!%$%J%i%$%6BT$A%*%V%8%’%/%H$Ne(B slot

e$B!!e(Bgc.c e$B$G$Ne(B heap
e$B$N?t!Je(Brb_objspace.heap.lengthe$B!K$b!$<h$j$?$$$J$!!$$H;W$$e(B
e$B;O$a$?$N$G$9$,!$!Je(Bheap
e$B$r;HMQ6X;_$@$H$9$k$H!K$$$$L>A0$,;W$$$D$+$J$$!%e(B

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

In message “Re: [ruby-dev:38652] Re: [Feature: trunk] GC.stat”
on Tue, 16 Jun 2009 11:18:38 +0900, SASADA Koichi [email protected]
writes:

|e$B!!e(Bgc.c e$B$G$Ne(B heap e$B$N?t!Je(Brb_objspace.heap.lengthe$B!K$b!$<h$j$?$$$J$!!$$H;W$$e(B
|e$B;O$a$?$N$G$9$,!$!Je(Bheap e$B$r;HMQ6X;_$@$H$9$k$H!K$$$$L>A0$,;W$$$D$+$J$$!%e(B

heap(e$B%*%V%8%'%/%H$N3d$jEv$F6u4Ve(B)e$B$r9=@.$9$ke(Bpagee$B$H9M$($l$PL>A0e(B
e$BIU$1$i$l$k$s$8$c$J$$$G$7$g$&$+!#e(B

e$B9b66@,5A$G$9!#=PCY$l$^$7$?$,!#e(B

2009/06/14 15:57 e$B$Ke(B SASADA Koichi[email protected]
e$B$5$s$O=q$-$^$7$?e(B:

*1: e$B0lHV:G8e$Ne(B GC e$B$G%+%&%s%H!%e(B

RailsBenche$B$G$b;w$?$h$&$JDs0F$,$"$C$?$N$r;W$$=P$7$^$7$?!#e(B

http://railsbench.rubyforge.org/svn/trunk/railsbench/GCPATCH
http://railsbench.rubyforge.org/svn/trunk/railsbench/ruby19gc.patch

e$B$3$C$A$O%Q%i%a%?$NJQ99$,$G$-$?$j!"=87W$N3+;O!&=*N;$,;XDj$G$-$?$j!“e(B
e$B%@%s%W$d%m%0$,$H$l$?$j$H!”=87W9`L$b4^$a$F$@$$$V0c$$$^$9$,!#e(B

e$BNI$70-$7$NH=CG$O$G$-$J$$$s$G$9$,!";29M$^$G!#e(B

e$B9b66@,5Ae(B ([email protected])

$B!!$5$5$@$G$9!#(B

(2009/06/14 7:57), SASADA Koichi wrote:

*1: $B0lHV:G8e$N(B GC $B$G%+%&%s%H!%(B

Gauche $B$G$O(B gc-stat $B$H$$$&$b$N$,$"$k!$$H(B shiro

$B$5$s$KJ9$$$?$b$N$G!%(B

gosh> (gc-stat)
((:total-heap-size 786432) (:free-bytes 163840) (:bytes-since-gc 532376)
(:total-bytes 532352))

$B!!$3$N7o!"%-!<$NL>A0$r$I$&$9$k$+$G$A$e$&$V$i$j$s$K$J$C$F$$$^$7$?!#<BAu$N(B
$B>:Y$KF’$_9~$s$@!"=hM}7O3+H/<T$7$+8+$J$$%a%=%C%I$H$$$&0UL#$r6/D4$9$k$?$a(B
$B$K!"(BGC.internal_statistic_information
$B$H$$$&46$8$GDI2C$9$k$N$O$I$&$G$7$g(B
$B$&$+!#(B

$B!!$G!"9=B$BN$N%U%#!<%k%I$NL>A0$r%-!<$H$7$FDI2C$9$k!#(B

$B!!(Brdoc $B$K$O!"(B

{:count=>1, # $B$3$l$^$G(B GC $B$,5/$3$C$?2s?t(B
:elapsed_time=>0.004, # $B$3$l$^$G(B GC $B$K$+$+$C$?%f!<%6;~4V(B

$B$7$+:$;$:!"$b$7$+$7$?$iB>$N>pJs$bF~$C$F$$$k$+$b$7$l$J$$$1$l$I!"$3$l$O(B
$B%P!<%8%g%s0MB8$G$"$k!"$_$?$$$JCm<a$,$"$k$h$&$J!#(B

$B!!$I$&$G$7$g$&$+!#(B

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

In message “Re: [ruby-dev:42385] Re: [Feature: trunk] GC.stat”
on Fri, 15 Oct 2010 02:00:43 +0900, SASADA Koichi [email protected]
writes:

|$B!!$3$N7o!“%-!<$NL>A0$r$I$&$9$k$+$G$A$e$&$V$i$j$s$K$J$C$F$$$^$7$?!#<BAu$N(B
|$B>:Y$KF’$_9~$s$@!”=hM}7O3+H/<T$7$+8+$J$$%a%=%C%I$H$$$&0UL#$r6/D4$9$k$?$a(B
|$B$K!"(BGC.internal_statistic_information $B$H$$$&46$8$GDI2C$9$k$N$O$I$&$G$7$g(B
|$B$&$+!#(B

$B$&!<$s!“$$$/$i$J$s$G$b$=$s$JL>A0$O7y$G$9!#(BGC.stat$B$G$$$$$8$c(B
$B$s!#$=$3$KH?BP$7$?$3$H$O$”$j$^$;$s!#(B

|$B!!$G!“9=B$BN$N%U%#!<%k%I$NL>A0$r%-!<$H$7$FDI2C$9$k!#(B
|
|$B!!(Brdoc $B$K$O!”(B
|
|> {:count=>1, # $B$3$l$^$G(B GC $B$,5/$3$C$?2s?t(B
|> :elapsed_time=>0.004, # $B$3$l$^$G(B GC $B$K$+$+$C$?%f!<%6;~4V(B
|
|$B$7$+:$;$:!“$b$7$+$7$?$iB>$N>pJs$bF~$C$F$$$k$+$b$7$l$J$$$1$l$I!”$3$l$O(B
|$B%P!<%8%g%s0MB8$G$“$k!”$_$?$$$JCm<a$,$"$k$h$&$J!#(B

$B%I%-%e%a%s%H$K(BGC.stat$B$O=hM}7O0MB8$G!“La$jCM$O(B($B:GDc8B$N6&DL9`(B
$B0J30(B)$B%P!<%8%g%s0MB8$G$”$k$HL@5-$9$k$N$G$I$&$G$7$g$&$+!#(B

$B!!$5$5$@$G$9!#(B

(2010/10/15 2:00), Yukihiro M. wrote:

|$B!!$3$N7o!"%-!<$NL>A0$r$I$&$9$k$+$G$A$e$&$V$i$j$s$K$J$C$F$$$^$7$?!#<BAu$N(B
|$B>:Y$KF’$_9~$s$@!"=hM}7O3+H/<T$7$+8+$J$$%a%=%C%I$H$$$&0UL#$r6/D4$9$k$?$a(B
|$B$K!"(BGC.internal_statistic_information
$B$H$$$&46$8$GDI2C$9$k$N$O$I$&$G$7$g(B
|$B$&$+!#(B

$B$&!<$s!"$$$/$i$J$s$G$b$=$s$JL>A0$O7y$G$9!#(BGC.stat$B$G$$$$$8$c(B
$B$s!#$=$3$KH?BP$7$?$3$H$O$"$j$^$;$s!#(B

$B!!H?BP$7$F$?$N$OEDCf$5$s$J$s$G(B…$B!#(B

$B%I%-%e%a%s%H$K(BGC.stat$B$O=hM}7O0MB8$G!“La$jCM$O(B($B:GDc8B$N6&DL9`(B
$B0J30(B)$B%P!<%8%g%s0MB8$G$”$k$HL@5-$9$k$N$G$I$&$G$7$g$&$+!#(B

$B!!$O$$!#$=$l$G$$$$$J$i!"$=$l$,NI$$$G$9!#(B

$B!!$5$5$@$G$9!#(B

(2010/10/15 8:58), Tanaka A. wrote:

GC.stat $B$KH?BP$7$?3P$($O$"$j$^$;$s$M!#(B
$BH?BP$J$N$OJV$jCM$NCf$K4^$^$l$k(B heap $B$H$$$&8l$K$D$$$F$G$9!#(B

$B!!$O$$!#$J$N$G!"(B

  1. stat $B$H$$$&;H$$$d$9$$L>A0$8$c$J$1$l$P$$$$$N$+!"(B
  2. $B%I%-%e%a%s%H$K$"$l$P$$$$$N$+!"(B
  3. $B%=!<%9$rJQ$($J$$8B$jBLL$J$N$+!"(B

$B$C$FOC$G!"(B1$B0F$rDs0F$7$F$_$^$7$?!#(B

$B!!(B2$B0F$GNI$1$l$P!"(B2$B0F$,NI$$$G$9!#(B

2010$BG/(B10$B7n(B15$BF|(B17:09 SASADA Koichi [email protected]:

GC.stat $B$KH?BP$7$?3P$($O$"$j$^$;$s$M!#(B
$BH?BP$J$N$OJV$jCM$NCf$K4^$^$l$k(B heap $B$H$$$&8l$K$D$$$F$G$9!#(B

$B!!$O$$!#$J$N$G!"(B

  1. stat $B$H$$$&;H$$$d$9$$L>A0$8$c$J$1$l$P$$$$$N$+!"(B

heap $B$NLdBj$O(B stat $B$rJQ$($F$b2r7h$7$^$;$s$M$(!#(B

  1. $B%I%-%e%a%s%H$K$“$l$P$$$$$N$+!”(B

$BCm0U=q$-$O$$$$$o$1$_$?$$$J$b$N$G$?$$$F$$Lr$KN)$?$J$$!"$H;W$C$F$$$^$9!#(B

  1. $B%=!<%9$rJQ$($J$$8B$jBLL$J$N$+!"(B

$B$I$&JQ$($k$+$K$h$k$s$8$c$J$$$G$7$g$&$+!#(B

2010$BG/(B10$B7n(B15$BF|(B16:32 SASADA Koichi [email protected]:

|$B$K!"(BGC.internal_statistic_information
$B$H$$$&46$8$GDI2C$9$k$N$O$I$&$G$7$g(B
|$B$&$+!#(B

$B$&!<$s!“$$$/$i$J$s$G$b$=$s$JL>A0$O7y$G$9!#(BGC.stat$B$G$$$$$8$c(B
$B$s!#$=$3$KH?BP$7$?$3$H$O$”$j$^$;$s!#(B

$B!!H?BP$7$F$?$N$OEDCf$5$s$J$s$G(B…$B!#(B

GC.stat $B$KH?BP$7$?3P$($O$"$j$^$;$s$M!#(B
$BH?BP$J$N$OJV$jCM$NCf$K4^$^$l$k(B heap $B$H$$$&8l$K$D$$$F$G$9!#(B

$B!!$5$5$@$G$9!#(B

(2010/10/18 11:48), Tanaka A. wrote:

  1. stat $B$H$$$&;H$$$d$9$$L>A0$8$c$J$1$l$P$$$$$N$+!"(B

heap $B$NLdBj$O(B stat $B$rJQ$($F$b2r7h$7$^$;$s$M$(!#(B

$B!!$$$$$(!#(B

$B!!EDCf$5$s$NLdBjDs5/$O!"(B

$B8x3+$N%a%=%C%I$K$9$l$P!"(BRuby $B$N<BAu$rCN$i$J$$$R$H$,6=L#$r;}(B
$B$D$3$H$O=<J,$K9M$($i$l$k$G$7$g$&!#(B

$B<BAu$rCN$C$F$$$k$R$H$7$+$o$+$i$J$/$F$$$$$H$$$&$$$$$o$1$O!"$h(B
$B$jDLMQ$7$K$/$/$J$k$s$8$c$J$$$G$7$g$&$+!#(B

$B$H$$$&$3$H$G!"!V<BAu$rCN$C$F$$$k?M$7$+$o$+$i$J$/$F$$$$!W46$rA}$d$7$?$D$b(B
$B$j$G$9!#(B

  1. $B%I%-%e%a%s%H$K$"$l$P$$$$$N$+!"(B

$BCm0U=q$-$O$$$$$o$1$_$?$$$J$b$N$G$?$$$F$$Lr$KN)$?$J$$!"$H;W$C$F$$$^$9!#(B

$B!!$H$$$&H?O@$,Mh$F$$$^$9$,!"$^$D$b$H$5$s!"$I$&$G$7$g$&$+!#(B

$B!!;d$O!"8@$$Lu$G$$$$$H;W$$$^$9$,!#(B

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

In message “Re: [ruby-dev:42424] Re: [Feature: trunk] GC.stat”
on Mon, 18 Oct 2010 20:30:44 +0900, SASADA Koichi [email protected]
writes:

|>> 2. $B%I%-%e%a%s%H$K$“$l$P$$$$$N$+!”(B
|>
|> $BCm0U=q$-$O$$$$$o$1$_$?$$$J$b$N$G$?$$$F$$Lr$KN)$?$J$$!“$H;W$C$F$$$^$9!#(B
|
|$B!!$H$$$&H?O@$,Mh$F$$$^$9$,!”$^$D$b$H$5$s!"$I$&$G$7$g$&$+!#(B
|
|$B!!;d$O!"8@$$Lu$G$$$$$H;W$$$^$9$,!#(B

$B;d$b8@$$Lu$G$$$$$H;W$$$^$9!">/$J$/$H$b$3$N7o$K$D$$$F$O!#(B

(2010/10/18 12:57), Yukihiro M. wrote:

$B;d$b8@$$Lu$G$$$$$H;W$$$^$9!">/$J$/$H$b$3$N7o$K$D$$$F$O!#(B

$B!!$H$$$&$o$1$G!"F~$l$^$7$?!#(B

  • $B8@$$Lu$r6/D4$9$k$?$a$K%(%s%H%j$NL>A0$r9=B$BN$NL>A0$K$"$o$;$^$7$?!#(B
  • elapesed_time $B$O!"(BProfiler $B$K$h$j$9$.$J$N$G$d$a$^$7$?!#(B
    $B!J(Blazy sweep $B$N$3$H$r9M$($k$H!"$A$g$C$HBgJQ$@$7!K(B

$B!!$3$&$$$&!":Y$+$$$N$b(B NEWS $B$K=q$/$s$G$7$?$C$1!#(B