From 851da984b4ecc658fe369cc11ed2b42dd6d20823 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 15 Mar 2026 23:40:29 +0900 Subject: [PATCH] gc.c: use :debt instead of :threshold in GC.stat Expose gc_debt directly as :debt in GC.stat without sign negation. The debt model has no threshold ceiling, so :threshold was a misleading name. Negative debt means credit, positive means GC is behind on collection work. Co-authored-by: Claude --- doc/internal/gc.md | 2 +- src/gc.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/internal/gc.md b/doc/internal/gc.md index 8f84f3e17..cf221c6a5 100644 --- a/doc/internal/gc.md +++ b/doc/internal/gc.md @@ -384,7 +384,7 @@ GC.disable # disable GC GC.stat # => { # :live => 5432, # live object count -# :threshold => 1024, # GC credit (positive=headroom) +# :debt => -1024, # GC debt (negative=credit, positive=behind) # :state => 0, # 0=root, 1=marking, 2=sweeping # :generational => true, # generational mode enabled # :full => false, # major GC in progress diff --git a/src/gc.c b/src/gc.c index 532f4e94e..24feb72a3 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1785,7 +1785,7 @@ mrb_objspace_page_slot_size(void) * GC.stat -> Hash * * Returns a Hash with GC statistics. - * Keys: :live, :threshold, :state, :generational, :full, + * Keys: :live, :debt, :state, :generational, :full, * :step_limit, :malloc_increase, :malloc_threshold * With MRB_GC_STATS: :total, :minor, :major * @@ -1798,7 +1798,7 @@ gc_stat(mrb_state *mrb, mrb_value self) mrb_value hash = mrb_hash_new_capa(mrb, 8); mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "live")), mrb_int_value(mrb, (mrb_int)gc->live)); - mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "threshold")), mrb_int_value(mrb, -gc->gc_debt)); + mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "debt")), mrb_int_value(mrb, gc->gc_debt)); mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "state")), mrb_int_value(mrb, (mrb_int)gc->state)); mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "generational")), mrb_bool_value(gc->generational)); mrb_hash_set(mrb, hash, mrb_symbol_value(mrb_intern_lit(mrb, "full")), mrb_bool_value(gc->full));