v8如何存储快速对象

时间:2018-04-26 13:31:17

标签: javascript v8

作为If v8 rehashes when an object grows答案的后续问题,我想知道v8如何实际存储“快速”对象。

答案:

  

快速模式通常可以更快地进行属性访问 - 但需要知道对象的结构。

     

V8最初会尝试构建一个对象看起来像“隐藏类”的模板。该对象将通过隐藏类进行转换,直到V8放弃并将对象存储为慢属性。

然后我问对象增长时v8 是否重新,答案是:

  

根本没有散列 - 它只是内存访问的偏移 - 就像C中的结构一样。

(对于快速模式对象)

它还提到:

  在这种情况下,

对象根本不存储为哈希映射 - 它是一个隐藏的类

总而言之,即使您更改了对象属性,它仍然是结构化的,因此存在一个隐藏的类:

var x = { a: 1, b: 2, c: 3 }
x.d = 4
x.e = 5
x.f = 6

基于答案,v8实际上并不使用哈希表来存储值,因为它使用隐藏类。所以问题是,v8如何将值实际存储为隐藏的类结构。隐藏的类做什么,它是如何构建的,它是如何工作的。当您稍后在代码中执行var d = 'd'; x[d]时(只是为了使其动态化),如何在不将d属性散列为字符串以获取索引的情况下知道d的值的位置(理论上)。它是如何从密钥中找到结构的内存地址的。

0 个答案:

没有答案