Chrome系列深入理解V8V8如何实现Object?
JavaScript 对象是一组属性(properties)和元素(elements)。 出于性能和内存的原因,V8 设计了几种不同的属性表示形式,例如对象内(in-object)、慢速属性(slow property)和自字典(self-dict)。 在本章中,让我们更深入地研究 JavaScript 对象。 1.JavaScript 对象布局
下面的图 1 显示了一个基本的 JavaScript 对象在内存中的样子。
元素和属性存储在两个独立的数据结构中,这使得添加和访问属性(property)或元素(elements)对于不同的使用模式更加高效。
元素主要用于各种 Array.prototype 方法,例如 pop 或 slice。 鉴于这些函数访问连续范围内的属性,V8 内部大多数情况下也将它们表示为简单数组。
命名属性以类似的方式存储在单独的数组中。 然而,与元素不同的是,我们不能简单地使用键来推断它们在属性数组中的位置; 我们需要一些额外的元数据。 在 V8 中,每个 JavaScript 对象都有一个关联的 HiddenClass。 HiddenClass 存储关于对象详情的信息,以及从属性名称到属性值的映射 。
在图 2 中,有元素(elements)、属性(propertis)和对象内(in-object)属性。 与元素或属性不同,对象内属性存储在对象本身中,这意味着您可以直接访问它们而无需映射。 in-object 的数量是在创建 JavaScript 对象时分配的(不同 V8 版本数量可能不一样)。
在图 3 中,存在三种不同的命名属性类型:in-object、fast/slow dictionary。 对象内属性直接存储在对象本身并提供最快的访问方式 Fast 属性存在于属性存储中,所有元信息都存储在 HiddenClass 的描述符数组中 慢速属性存在于一个独立的属性字典中,元信息不再通过 HiddenClass 共享
图 4 显示了 JavaScript 对象内存布局,所有 V8 托管堆对象都必须有一个存储在首地址的映射指针。 当然,也有元素和属性。 描述符是 map 中的一个重要成员,它负责描述一个对象的属性,这个我们以后会讲到。
在下面的例子中,sayname 是一个等同于 console.log 的函数。这里可以想一个问题:一个对象的函数存储在哪里? 即,sayname 在哪里? 1. function person(name) { 2. this.name=name; 3. this.sayname=function(){console.log(this.name);} 4. } 5. worker = new person("Nicholas"); 6. worker.sayname(); 7. //separation........................................ 8. //separation........................................ 9. Bytecode Age: 0 10. 000001DAA2FA1E96 @ 0 : 13 00 LdaConstant [0] 11. 000001DAA2FA1E98 @ 2 : c2 Star1 12. 000001DAA2FA1E99 @ 3 : 19 fe f8 Mov , r2 13. 0 E> 000001DAA2FA1E9C @ 6 : 64 51 01 f9 02 CallRuntime [DeclareGlobals], r1-r2 14. 100 S> 000001DAA2FA1EA1 @ 11 : 21 01 00 LdaGlobal [1], [0] 15. 000001DAA2FA1EA4 @ 14 : c2 Star1 16. 000001DAA2FA1EA5 @ 15 : 13 02 LdaConstant [2] 17. 000001DAA2FA1EA7 @ 17 : c1 Star2 18. 000001DAA2FA1EA8 @ 18 : 0b f9 Ldar r1 19. 109 E> 000001DAA2FA1EAA @ 20 : 68 f9 f8 01 02 Construct r1, r2-r2, [2] 20. 107 E> 000001DAA2FA1EAF @ 25 : 23 03 04 StaGlobal [3], [4] 21. 134 S> 000001DAA2FA1EB2 @ 28 : 21 03 06 LdaGlobal [3], [6] 22. 000001DAA2FA1EB5 @ 31 : c1 Star2 23. 141 E> 000001DAA2FA1EB6 @ 32 : 2d f8 04 08 LdaNamedProperty r2, [4], [8] 24. 000001DAA2FA1EBA @ 36 : c2 Star1 25. 141 E> 000001DAA2FA1EBB @ 37 : 5c f9 f8 0a CallProperty0 r1, r2, [10] 26. 000001DAA2FA1EBF @ 41 : c3 Star0 27. 151 S> 000001DAA2FA1EC0 @ 42 : a8 Return 28. Constant pool (size = 5) 29. 000001DAA2FA1E29: [FixedArray] in OldSpace 30. - map: 0x024008ac12c1
男士网购服装,尺寸避坑指南网购已经不是什么稀奇的事情了,现在每一天中国的快递包裹已经超过了3亿件。但当网购涉及到服装时,仍然是一些男士的痛点。原因很简单,因为网上购买衣服时并不知道衣服实际上是否合身,或材质
爱上美女街拍第110卷,动感身材太美了艺术来源于生活!美丽来源于生活!只有运动的女人才会有动感身材!每个女人都渴望自己有动感身材!每个男人都盼望自己的女人有动感身材。动感身材那么美,受欢迎是必然的。如果你对动感身材不太
路易威登引领鞋履潮流风尚众所周知,LV是一家箱包起家的百年蓝血品牌,但是在百年的时间里LV也在不断开发探索成衣鞋履饰品等领域,用其高端和品质和卓越的品牌匠心不断地探索着时尚与艺术的边界,展现了当代的摩登潮
穿来穿去,还是脚踝靴最显高显瘦,配裤子裙子都特好看每年的秋冬季节当中,真的会有一批又一批的经典鞋型被不少的时尚博主和女一人带上热门,这其中不乏有非常经典的短靴和长筒靴的搭配,而在今年最具热度的绝对是脚裸靴。靴子一类的鞋型穿来穿去其
开衫总是那么受欢迎,长袖羊毛开衫教程,休闲舒适易穿搭春天很适合穿开衫,而且喜欢休闲风穿搭的,开衫是必不可缺的款式。今天我们来学习一款长袖羊毛开衫的钩法,示范用线为混色亮丝羊毛线(使用别的线如羊绒线或混纺线等都可以),7。0mm的钩针
决战荷兰,阿根廷队需要做出的三点改变北京时间12月10日凌晨300,卡塔尔世界杯将迎来夺冠热门阿根廷队与欧洲劲旅荷兰队的一场四分之一决赛。回顾比赛历程,阿根廷队晋级世界杯八强之路并不平坦。首战12负于沙特自不必说,次
辽篮逆转深圳,赵继伟化身隆多,桑普森大赞!二哥送上暖心祝福CBA第二阶段比赛继续火热进行,深圳男篮在一度领先辽宁男篮11分的情况下,被辽篮完成逆转,最终辽篮以10490战胜深圳,拿到三连胜!赢下深圳后,辽篮目前战绩为9胜2负,排名积分榜第
再见,黄金一代死亡之组的故事相当精彩,但我今天想写写比利时黄金一代。是的,德布劳内领衔的欧洲红魔,在不断错失机会后战平了克罗地亚,小组赛就惨遭淘汰了。出局之时,他们排名世界第二。世界排名有时候当
医圣治咽第一方半夏厚朴汤,行气化痰降逆,咽喉疾病一扫光你身边有这样的人吗?没事儿总是吭吭吭地清嗓子,时不时的总想找个地方吐痰,嗓子总有异物感不停的吞咽口水,张嘴说话嘴巴里总有很大的气味这些症状,是由于肝气郁结肺胃失于宣降,导致体内津液
全市四类药品储备量可满足我市家庭用药需求大型连锁药店药品价格基本平稳全市四类药品储备量可满足我市家庭用药需求大型连锁药店药品价格基本平稳哈市市场监管部门采取四方面措施加大药品稳价力度目前,哈市退热止咳治感冒抗病毒四类相关药品供应储备情况如何?市场监
膝盖肿痛就用六穴五针治疗,效果突出足阳明经内属于胃,外行于承泣至厉兑的缝隙中,通过足阳明经别加强了对脾胃的联系。素问灵兰秘典论曰脾胃者,仓禀之官,五味出焉。素问六节藏象论曰脾胃大肠小肠三焦膀胱者,仓禀之本。说明足阳