Feature #16648 ยป 0001-gc-prefech-objects-seems-to-improve-full-GC-performa.patch
| gc.c | ||
|---|---|---|
|
mark_method_entry(rb_objspace_t *objspace, const rb_method_entry_t *me)
|
||
|
{
|
||
|
const rb_method_definition_t *def = me->def;
|
||
|
__builtin_prefetch(def);
|
||
|
gc_mark(objspace, me->owner);
|
||
|
gc_mark(objspace, me->defined_class);
|
||
| ... | ... | |
|
gc_mark(rb_objspace_t *objspace, VALUE obj)
|
||
|
{
|
||
|
if (!is_markable_object(objspace, obj)) return;
|
||
|
__builtin_prefetch(RBASIC(obj));
|
||
|
gc_mark_ptr(objspace, obj);
|
||
|
}
|
||
| ... | ... | |
|
else {
|
||
|
long i, len = RARRAY_LEN(obj);
|
||
|
const VALUE *ptr = RARRAY_CONST_PTR_TRANSIENT(obj);
|
||
|
for (i=0; i < len; i++) {
|
||
|
__builtin_prefetch(RBASIC(ptr[i]));
|
||
|
}
|
||
|
for (i=0; i < len; i++) {
|
||
|
gc_mark(objspace, ptr[i]);
|
||
|
}
|
||
| ... | ... | |
|
if (ptr) {
|
||
|
uint32_t i, len = ROBJECT_NUMIV(obj);
|
||
|
for (i=0; i < len; i++) {
|
||
|
__builtin_prefetch(RBASIC(ptr[i]));
|
||
|
}
|
||
|
for (i = 0; i < len; i++) {
|
||
|
gc_mark(objspace, ptr[i]);
|
||
|
}
|
||
| ... | ... | |
|
long i;
|
||
|
const long len = RSTRUCT_LEN(obj);
|
||
|
const VALUE * const ptr = RSTRUCT_CONST_PTR(obj);
|
||
|
for (i=0; i < len; i++) {
|
||
|
__builtin_prefetch(RBASIC(ptr[i]));
|
||
|
}
|
||
|
for (i=0; i<len; i++) {
|
||
|
gc_mark(objspace, ptr[i]);
|
||
|
}
|
||
| ... | ... | |
|
static void
|
||
|
gc_mark_from(rb_objspace_t *objspace, VALUE obj, VALUE parent)
|
||
|
{
|
||
|
__builtin_prefetch(RBASIC(obj));
|
||
|
gc_mark_set_parent(objspace, parent);
|
||
|
rgengc_check_relation(objspace, obj);
|
||
|
if (gc_mark_set(objspace, obj) == FALSE) return;
|
||