资讯专栏INFORMATION COLUMN

筆記:V8 的 Javascript 對象表示

fyber / 737人阅读

摘要:內容爲該問題下的答案是對的學習筆記。一個叫做的過程用來決定對象的大小,其後的屬性作爲使用單獨的數組儲存。其中,包括然而有時也會降級爲當然由於分開儲存,降級並不會影響到其它類型的屬性。

內容爲該問題下的答案:http://segmentfault.com/q/1010000002423380

是對 http://jayconrod.com/posts/52/a-tour-of-v8-object-representation 的學習筆記。

對象的兩層實現

兩層實現分別爲:

Named properties: in-object properties and extra properties

Numbered properties: fast elements

Named properties

in-object properties 使用公共 map 來描述其結構,某些情況(難以共用 map)會降級爲 Dictionary mode。

  

V8 can handle minor divergences like this just fine, but if your code assigns all sorts of random properties to objects from the same constructor in no particular order, or if you delete properties, V8 will drop the object into dictionary mode, where properties are stored in a hash table. This prevents an absurd number of maps from being allocated.

一個叫做 In-object slack tracking 的過程用來決定對象的大小,其後的屬性作爲 extra properties 使用單獨的數組儲存。

  

Now I"m sure your next question is, "what happens when a new property is added after in-object slack tracking is complete?" This is handled by allocating an overflow array to store the extra properties. The overflow array can always be reallocated with a larger size as new properties are added.

最後,methods 和其它屬性一道,儲存在 map 裏。

Numbered properties

其中,fast elements 包括

fast small integers

fast doubles

fast values

然而 fast elements 有時也會降級爲 dictionary mode

  

If you assign to an index that"s way past the end of your the elements array, V8 may downgrade the elements to dictionary mode.

當然由於分開儲存,降級並不會影響到其它類型的屬性。

  

Because named properties and elements are stored separately, even if an object drops into dictionary mode for elements, named properties may still be accessed quickly (and vice versa).

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87664.html

相关文章

  • 【譯】chrome-remote-interface

    摘要:該支持下列事件當到的連接已建立時觸發。取得該調試協議描述符。在關閉請求收到響應后執行,他將獲得下列參數一個對象,指明成功狀態當缺省時,將返回一個對象。當缺省時,將返回一個對象,並且狀態取決于屬性。 本文翻譯自:chrome-remote-interface原文更新時間:July 21,2017譯者:Pandorym Chrome 調試協議 的接口,他提供一個使用 JavaScript ...

    lentoo 评论0 收藏0
  • LG深入JavaScript高级语法-coderwhy

    摘要:深入高级语法集合框架早在中之前,就提供了特設類。固然這些類都非常有用,但是它們缺少一個中心的,統一的主題。算法是完成匯合接口的對象里的辦法執行的一些有用的計算,例如搜索和排序。雖然不是匯合,但是它們完整整合在匯合中。 download:​​深入JavaScript高级语法-coderwhy​​Java 集合框架早在 Jav...

    不知名网友 评论0 收藏0
  • 夕阳下, 那是我在奔跑——单件模式

    摘要:急切的創建對象饿汉式以上爲饿汉式單列設計,該設計是線程安全的,即不同的線程在調用時返回的是統一對象,在加載這個類時,馬上創建了這個類的唯一單列實列。 單件模式(JAVA實現) 定義 單件模式: 確保一個類只有一個實列, 並提供一個全局訪問點 單件模式和全局變量的區別 若將對象賦值給一個全局變量, 則該對象需在程序開始時就創建好, 而改對象可能不會使用, 造成資源浪費, 而單件模式支持...

    lieeps 评论0 收藏0
  • Linux 30周年:Linux 5.14閃亮登場!添加新硬件和秘密內存區域支持

    摘要:超多功能增加不再支持添加到的新功能還真不少包括使用的秘密內存區域支持核心調度支持圍繞的持續啟用和圖形支持筆記本電腦支持支持。說到英特爾,增加了對的平台的更多支持,該平台可根據需要優先處理工作負載。另外,還將增加戴爾硬件隱私支持。Linux 之父Linus Torvald:慶祝完Linux 30 歲了吧,一起來看新的 Linux 5.14。 沒錯,8月30日,Torvald宣布推出 Li...

    draveness 评论0 收藏0
  • javascript引擎——V8

    摘要:类将源代码解释并构建成抽象语法树,使用类来创建它们,并使用类来分配内存。类抽象语法树的访问者类,主要用来遍历抽象语法树。在该函数中,先使用类来生成抽象语法树再使用类来生成本地代码。 通过上一篇文章,我们知道了JavaScript引擎是执行JavaScript代码的程序或解释器,了解了JavaScript引擎的基本工作原理。我们经常听说的JavaScript引擎就是V8引擎,这篇文章我们...

    luoyibu 评论0 收藏0

发表评论

0条评论

fyber

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<