From a617afc643e17cea5c1960a60adcd5ffb25fdfe2 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 6 Jul 2014 04:42:35 +0000 Subject: * gc.c (rb_gc_register_mark_object): change data structure. From single array, to array of arrays. Each array only has 1024 entries. * vm.c (Init_vm_objects): change default capa from 1 to 128. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46714 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 8 ++++++++ gc.c | 13 ++++++++++++- vm.c | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 59a7d33192..751f40edeb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Sun Jul 6 13:37:27 2014 Koichi Sasada + + * gc.c (rb_gc_register_mark_object): change data structure. + From single array, to array of arrays. Each array only has 1024 + entries. + + * vm.c (Init_vm_objects): change default capa from 1 to 128. + Sat Jul 5 05:05:53 2014 Vipul A M * lib/irb/locale.rb (IRB::Locale#modifier): fix wrong attr_reader diff --git a/gc.c b/gc.c index 661f100abc..13df413ec9 100644 --- a/gc.c +++ b/gc.c @@ -5119,10 +5119,21 @@ rb_gc_force_recycle(VALUE p) */ } +#ifndef MARK_OBJECT_ARY_BUCKET_SIZE +#define MARK_OBJECT_ARY_BUCKET_SIZE 1024 +#endif + void rb_gc_register_mark_object(VALUE obj) { - VALUE ary = GET_THREAD()->vm->mark_object_ary; + VALUE ary_ary = GET_THREAD()->vm->mark_object_ary; + VALUE ary = rb_ary_last(0, 0, ary_ary); + + if (ary == Qnil || RARRAY_LEN(ary) >= MARK_OBJECT_ARY_BUCKET_SIZE) { + ary = rb_ary_tmp_new(MARK_OBJECT_ARY_BUCKET_SIZE); + rb_ary_push(ary_ary, ary); + } + rb_ary_push(ary, obj); } diff --git a/vm.c b/vm.c index 32beb34d5a..0fd5e3fd9c 100644 --- a/vm.c +++ b/vm.c @@ -2793,7 +2793,7 @@ Init_vm_objects(void) vm->defined_module_hash = rb_hash_new(); /* initialize mark object array, hash */ - vm->mark_object_ary = rb_ary_tmp_new(1); + vm->mark_object_ary = rb_ary_tmp_new(128); } /* top self */ -- cgit v1.2.3