Chrome 开发工具之 Memory
上面有三个按钮:
- Heap snapshot – 用以打印堆快照,堆快照文件显示页面的 javascript 对象和相关 DOM 节点之间的内存分配
- Allocation instrumentation on timeline – 在时间轴上记录内存信息,随着时间变化记录内存信息。
- Allocation sampling – 内存信息采样,使用采样的方法记录内存分配。此配置文件类型具有最小的性能开销,可用于长时间运行的操作。它提供了由 javascript 执行堆栈细分的良好近似值分配。
- Summary – 可以显示按构造函数名称分组的对象。使用此视图可以根据按构造函数名称分组的类型深入了解对象(及其内存使用),适用于跟踪 DOM 泄漏。
- Comparison – 可以显示两个快照之间的不同。使用此视图可以比较两个(或多个)内存快照在某个操作前后的差异。检查已释放内存的变化和参考计数,可以确认是否存在内存泄漏及其原因。
- Containment – 此视图提供了一种对象结构视图来分析内存使用,由顶级对象作为入口。
- Statistic – 内存使用饼状的统计图。
var _____testArray_____ = [{ value: \'hello\' }] function someTodo() { _____testArray_____.push({ value: \':::::::::\' }) } document.querySelector(\'#btn\').addEventListener(\'click\', someTodo, false)
- DOMWindow – 是被视为 JavaScript 代码 “全局” 对象的对象。
- GC – VM 的垃圾使用的实际 GC 根。GC 根可以由内置对象映射、符号表、VM 线程堆栈、编译缓存、句柄作用域和全局句柄组成。
- 原生对象 – 是 “推送” 至 JavaScript 虚拟机内以允许自动化的浏览器对象,例如 DOM 节点和 CSS 规则。
- Contructor – 表示使用此构造函数创建的所有对象
- Distance – 显示使用节点最短简单路径时距根节点的距离
- Shallow Size – 显示通过特定构造函数创建的所有对象浅层大小的总和。浅层大小是指对象自身占用的内存大小(一般来说,数组和字符串的浅层大小比较大)
- Retained Size – 显示同一组对象中最大的保留大小。某个对象删除后(其依赖项不再可到达)可以释放的内存大小称为保留大小。
- #New – Comparison 特有 – 新增项
- #Deleted – Comparison 特有 – 删除项
- #Delta – Comparison 特有 – 增量
- Alloc. Size – Comparison 特有 – 内存分配大小
- Freed Size – Comparison 特有 – 释放大小
- Size Delta – Comparison 特有 – 内存增量
- 基础类型 string 值为 hello ,内存标记是 string@353953,这个 string 值存在于 Object @362113 对象上的 value 属性上;
- Object @362113 在 Object 列表里,在 Array @356493 的索引 0 位置存在该对象的引用;
- Array @356493 在 Window / @353829 对象上存在引用,属性名为”___testArray___”;
- Window / @353829 是个 Windows 对象,在 Windows 列表里。
"hello" -> 在(string)列表里 -> string@353953 -> value in Object @362113 Object -> 在 Object 列表里 -> [0] in Array @356493 Array -> 在(array)列表里 -> _____testArray_____ in Window / @353829 Windows -> 在 Windows 列表里 -> Window / @353829
var _____testArray_____ = [{ value: \'hello\' }] var count = 1 function someTodo() { // 每次点击 字符串长度都以上一次为基础增加到5倍,拉大差异突出效果,并且之后在字符串头部加上count值做区分 count *= 5 var str = new Array(count * 10).join(\':\') _____testArray_____.push({ value: count + str }) } document.querySelector(\'#btn\').addEventListener(\'click\', someTodo, false)
# 前面的数字代表本次记录索引,点击了5次 # 0 Shallow Size : 112 Constructor Distance Shallow Size Retained Size - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (array)×9 3 5008 0% 5008 0% (system)×60 3 2416 0% 2640 0% (closure)×1 3 4768 0% 2928 0% Object×3 3 144 0% 768 0% MouseEvent×3 4 112 0% 7200 0% (string)×2 5 96 0% 96 0% (concatenated string)×2 4 64 0% 160 0% Event 5 56 0% 2040 0% UIEvent 5 32 0% 648 0% # 1 (string)×2 5 296 0% 296 0% (concatenated string)×2 4 64 0% 360 0% Object 3 32 0% 392 0% # 2 (string)×2 5 1296 0% 1296 0% (concatenated string)×2 4 64 0% 1360 0% Object 3 32 0% 1392 0% # 3 (string)×2 5 6296 0% 6296 0% (concatenated string)×2 4 64 0% 6360 0% Object 3 32 0% 6392 0% # 4 (string)×2 5 31296 0% 31296 0% (array) 4 80 0% 80 0% (concatenated string)×2 4 64 0% 31360 0% (system) 4 32 0% 32 0% Object 3 32 0% 31392 0%