Avoid unnecessary writes to ISEQ during GC
On mark we check whether a callcache has been invalidated and if it has we replace it with the empty callcache, rb_vm_empty_cc(). However we also consider the empty callcache to not be active, and so previously would overwrite it with itself. These additional writes are problematic because they may force Copy-on-Write to occur on the memory page, increasing system memory use.
This commit is contained in:
parent
17b89849c6
commit
9d6b8806a4
2
iseq.c
2
iseq.c
@ -346,7 +346,7 @@ rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating)
|
|||||||
if (cc_is_active(cds[i].cc, reference_updating)) {
|
if (cc_is_active(cds[i].cc, reference_updating)) {
|
||||||
rb_gc_mark_and_move_ptr(&cds[i].cc);
|
rb_gc_mark_and_move_ptr(&cds[i].cc);
|
||||||
}
|
}
|
||||||
else {
|
else if (cds[i].cc != rb_vm_empty_cc()) {
|
||||||
cds[i].cc = rb_vm_empty_cc();
|
cds[i].cc = rb_vm_empty_cc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user