我正在玩Chrome的Dev Tools及其Heap Profiler。我无法弄清楚如何在页面上找到javascript中定义的变量。你可以看到很多令人着迷的东西,但搜索或浏览它是一个挑战。例如,如果页面正文中有一个只有“var x = 42;”的小脚本,那么如何在堆配置文件中找到它?
答案 0 :(得分:1)
42不是堆对象。原因是性能和记忆。如果一个整数适合31位(一位为标记指针/非指针保留),则v8按原样存储,否则v8为其分配一个堆对象。见http://www.youtube.com/watch?v=hWhMKalEicY
因此,在您的情况下,v8在上下文中保留一个插槽,将该名称“关联”到插槽并将42存储到插槽中。在double,string,array或对象的情况下,v8会将指向它的指针存储到插槽中。堆分析器扫描堆以查找堆对象。之后,它会扫描每个堆对象的内容,以获得指向其他对象的指针。结果它获得了堆图。因此堆图不包含普通整数。