动态语言对象模型:从哈希表到 Inline Cache

Objects, attributes, maps, oh my

在 Python、Ruby 和 JavaScript 等动态语言中,对象常被简单视为名称到值的映射,这导致运行时使用哈希表存储属性。虽然灵活,但哈希查找和内存间接访问严重拖慢性能。本文深入解析了现代运行时如何通过引入 Map(或 Shape、Hidden Class)机制来优化这一过程。通过构建不可变的 Map 树结构,结合 Inline Cache 技术,我们可以将属性访问从耗时的字符串哈希查找转变为高效的整数索引直接加载。文章通过 500 行以内的代码示例,清晰展示了从基础对象模型到高性能 Map 系统的演进,揭示了属性添加顺序如何影响对象布局及缓存命中率,为理解虚拟机底层优化提供了直观视角。

这并非好事,因为字面上的每一个 a.b 操作都在执行数百甚至数千条 CPU 指令,包括多次依赖性的内存加载。

同日更多故事

2026-10-23