Ruby 3.5 中的快速分配

主要观点: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帧消失)。
阅读 29
0 条评论