mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Optimize callcache invalidation for refinements
Fixes [Bug #21201] This change addresses a performance regression where defining methods inside `refine` blocks caused severe slowdowns. The issue was due to `rb_clear_all_refinement_method_cache()` triggering a full object space scan via `rb_objspace_each_objects` to find and invalidate affected callcaches, which is very inefficient. To fix this, I introduce `vm->cc_refinement_table` to track callcaches related to refinements. This allows us to invalidate only the necessary callcaches without scanning the entire heap, resulting in significant performance improvement.
This commit is contained in:
parent
d0b5f31554
commit
c8ddc0a843
Notes:
git
2025-06-09 03:33:51 +00:00
9 changed files with 111 additions and 17 deletions
|
@ -37,6 +37,8 @@ size_t rb_set_table_size(const struct set_table *tbl);
|
|||
set_table *rb_set_init_table_with_size(set_table *tab, const struct st_hash_type *, st_index_t);
|
||||
#define set_init_numtable rb_set_init_numtable
|
||||
set_table *rb_set_init_numtable(void);
|
||||
#define set_init_numtable_with_size rb_set_init_numtable_with_size
|
||||
set_table *rb_set_init_numtable_with_size(st_index_t size);
|
||||
#define set_delete rb_set_delete
|
||||
int rb_set_delete(set_table *, st_data_t *); /* returns 0:notfound 1:deleted */
|
||||
#define set_insert rb_set_insert
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue