Fast Allocations in Ruby 3.5
a year ago
- #Optimization
- #Performance
- #Ruby
- Ruby 3.5在对象分配方面实现了显著的速度提升,最高可达六倍性能提升
- 基准测试对比了带/不带YJIT时的位置参数和关键字参数性能,均显示持续加速效果
- 位置参数在不使用YJIT时获得1.8倍加速,使用YJIT时达2.3倍,且与参数数量无关
- 关键字参数随着参数增多加速效果递增:无YJIT时最高3倍,启用YJIT时超过6.5倍
- 该优化通过内联`Class#new`方法实现,消除了堆栈帧和参数拷贝操作
- 内联机制提高了内联缓存命中率,并避免Ruby与C调用约定间的转换开销
- 存在微小向后兼容问题:堆栈追踪中将缺失`Class#new`帧信息
- 内存占用因调用点指令增加略有上升,但影响轻微(指令序列大小仅增长0.5%)