主要观点:Ruby 应用常分配对象,Ruby 3.5 中对象分配将比之前版本快很多,文中通过基准测试和代码示例展示了不同参数类型(位置参数和关键字参数)在启用和不启用 YJIT 时的性能提升情况,重点介绍了通过内联Class#new
实现分配速度提升的方法及优缺点。
关键信息:
- 基准测试代码展示了不同参数类型和 YJIT 状态下的对象分配性能。
- Ruby 中调用 Ruby 方法和 C 方法的方式及参数传递差异。
- 内联
Class#new
的原理及优化效果,包括消除参数复制、提高内联缓存命中率等,同时存在内存使用增加和向后不兼容的缺点。
重要细节: - 位置参数在不启用 YJIT 时 Ruby 3.5 比 Ruby 3.4.2 快约 1.8 倍,启用 YJIT 时快约 2.3 倍;关键字参数随着数量增加速度提升比位置参数更明显,仅 3 个关键字参数时 Ruby 3.5 比 Ruby 3.4.2 快 3 倍,启用 YJIT 时快超 6.5 倍。
- 内联
Class#new
后字节码发生变化,消除了Class#new
的调用和参数复制,提高了缓存命中率,但增加了指令数量和内存使用,且有向后不兼容情况(如Class#new
帧消失)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。