<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          在 Chrome(V8) 中 Symbol() 、Object.create(null) 和 {} 的內存占用分別...

          共 1698字,需瀏覽 4分鐘

           ·

          2020-10-20 09:11

          使用 Chrome Dev Tools 很容易查看內存占用。

          代碼:

          function Holder() {}
          var holder = new Holder()

          holder.s = Symbol("s")
          holder.n = Object.create(null)
          holder.o = {}

          如果你不喜歡自己敲,我在 GitHub 上新建了一個 repo:justjavac/v8-javascript-memory

          分析步驟:

          1. 使用 Chrome 瀏覽器訪問?https://justjavac.com/v8-javascript-memory/

          2. 打開 Dev Tools,如圖:

          343a7dc365176fc262c1871bf88219f9.webpv8 chrome 內存占用
          1. 選擇 Memory 標簽頁

          2. 點擊 take heap snapsshot

          3. 在過濾框中輸入?hol?快速過濾出 holder

          Shallow Size:對象自身占用內存的大小,不包括它引用的對象。JavaScript 對象會將一些內存用于自身的說明和保存中間值。通常,只有數組和字符串會有明顯的淺層大小。

          Retained Size:這是將對象本身連同其無法從?GC root?到達的相關對象一起刪除后釋放的內存大小。

          單位是字節(jié)(Byte)。

          從截圖中可以看到

          • Symbol()?的內存占用是 16。

          • Object.create(null)?自身占用 12,總占用 88。

          • {}?自身占用 28,總占用 28。

          繼續(xù)展開你會看到其他信息:

          a487b7ac2f33621e59df6a795ad519d7.webpchrome dev tools
          1. __proto__?是原型鏈。

          2. map?就是很多文章都在介紹的 V8 對象的黑魔法 Hidden Class。

          使用 V8 進行調試

          V8 的?%DebugPrint()?函數可以打印出對象的調試信息。這需要手動使用?--is_debug=true?參數來編譯 V8。

          代碼:

          let o = {};
          %DebugPrint(o);

          運行:d8 --allow_natives_syntax heap.js

          輸出:

          DebugPrint: 0x2604080c60e9: [JS_OBJECT_TYPE]
          - map: 0x2604082802d9 [FastProperties]
          - prototype: 0x2604082413c9
          - elements: 0x2604080406e9 [HOLEY_ELEMENTS]
          - properties: 0x2604080406e9 {}
          0x2604082802d9: [Map]
          - type: JS_OBJECT_TYPE
          - instance size: 28
          - inobject properties: 4
          - elements kind: HOLEY_ELEMENTS
          - unused property fields: 4
          - enum length: invalid
          - back pointer: 0x26040804030d
          - prototype_validity cell: 0x2604081c0451
          - instance descriptors (own) #0: 0x2604080401b5
          - prototype: 0x2604082413c9
          - constructor: 0x2604082413e5
          - dependent code: 0x2604080401ed
          - construction counter: 0

          注:雖然 node 和 deno 都支持 V8 的?--allow_natives_syntax參數,但是如果你使用 node 或者 deno 運行,只能得到一行類似?0x053bedbc1399 的輸出。如果想得到詳細的輸出,必須手動編譯,并且在編譯過程中增加?--is_debug=true?參數。

          相關閱讀


          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    sm调教视频在线观看 | 久久黄色网片老女人做爱 | 中文字幕在线一页 | 国产成人无码精品久久久一区 | 日韩啪啪啪啪 |