V8 隐藏类求助

2023-02-11 20:22:58 +08:00
 uccs

我看网上的资料说,v8 实现隐藏类有一个假设,对象的行状是固定的。

动态添加属性会创建新的隐藏类,为什么我在 chrome memory 中看到现象是这两种写法都会创建三个隐藏类(back_pointer 指向上一个隐藏类),这是为什么?

以我的理解,代码一,应该是创建三个隐藏类,代码二应该只有一个隐藏类

下面是代码

代码一:

const foo = {}
foo.name = "a"
foo.type = "b"

对应隐藏类图片:

代码二:

const foo2 = {
  name: "a",
  type: "b",
}

对应隐藏类图片:

504 次点击
所在节点    问与答
2 条回复
weiwoxinyou
2023-02-11 21:35:18 +08:00
我想你需要的回答是这个: https://juejin.cn/post/7064390052519870501 ,个人理解是,代码一每一次新增对象,隐藏类都变成了一个新的类,这样代码二新增的时候,没找到与其形状相同的类,于是新建了 3 个隐藏类针对对象本身及对象的两个属性。
uccs
2023-02-11 21:48:13 +08:00
@weiwoxinyou 这篇文章直接抄极客时间的 V8 专栏,我就是看了这个专栏,掉进了隐藏类的坑里(捂脸)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/915234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX