mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* load.c (features_index_add_single): Move loaded_features_index array values off
the ruby heap. [Bug #9201] [ruby-core:58805] * load.c (loaded_features_index_clear_i): Clean up off-heap array structure. * vm.c (rb_vm_mark): Remove unnecessary mark_tbl for loaded_features_index. This improves minor GC time by 15% in a large application. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43974 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
084b602d9a
commit
4258235876
3 changed files with 15 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
Tue Dec 3 17:11:47 2013 Aman Gupta <ruby@tmm1.net>
|
||||
|
||||
* load.c (features_index_add_single): Move loaded_features_index array values off
|
||||
the ruby heap. [Bug #9201] [ruby-core:58805]
|
||||
* load.c (loaded_features_index_clear_i): Clean up off-heap array structure.
|
||||
* vm.c (rb_vm_mark): Remove unnecessary mark_tbl for loaded_features_index.
|
||||
This improves minor GC time by 15% in a large application.
|
||||
|
||||
Tue Dec 3 17:01:45 2013 Aman Gupta <ruby@tmm1.net>
|
||||
|
||||
* include/ruby/ruby.h (struct RClass): Add wrapper struct around
|
||||
|
|
8
load.c
8
load.c
|
@ -203,7 +203,8 @@ features_index_add_single(VALUE short_feature, VALUE offset)
|
|||
VALUE feature_indexes[2];
|
||||
feature_indexes[0] = this_feature_index;
|
||||
feature_indexes[1] = offset;
|
||||
this_feature_index = rb_ary_tmp_new(numberof(feature_indexes));
|
||||
this_feature_index = (VALUE)xcalloc(1, sizeof(struct RArray));
|
||||
RBASIC(this_feature_index)->flags = T_ARRAY; /* fake VALUE, do not mark/sweep */
|
||||
rb_ary_cat(this_feature_index, feature_indexes, numberof(feature_indexes));
|
||||
st_insert(features_index, (st_data_t)short_feature_cstr, (st_data_t)this_feature_index);
|
||||
}
|
||||
|
@ -263,6 +264,11 @@ features_index_add(VALUE feature, VALUE offset)
|
|||
static int
|
||||
loaded_features_index_clear_i(st_data_t key, st_data_t val, st_data_t arg)
|
||||
{
|
||||
VALUE obj = (VALUE)val;
|
||||
if (!SPECIAL_CONST_P(obj)) {
|
||||
rb_ary_free(obj);
|
||||
xfree((void *)obj);
|
||||
}
|
||||
xfree((char *)key);
|
||||
return ST_DELETE;
|
||||
}
|
||||
|
|
3
vm.c
3
vm.c
|
@ -1612,9 +1612,6 @@ rb_vm_mark(void *ptr)
|
|||
if (vm->loading_table) {
|
||||
rb_mark_tbl(vm->loading_table);
|
||||
}
|
||||
if (vm->loaded_features_index) {
|
||||
rb_mark_tbl(vm->loaded_features_index);
|
||||
}
|
||||
|
||||
rb_vm_trace_mark_event_hooks(&vm->event_hooks);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue