在分析内存泄漏问题时,我们会用到很多术语。因此在进行分享前,我们先“拉齐一下颗粒度”,以便于我们后续的交流。
内存图
把页面中使用的内存想象成图像:由节点和边连接而成。
内存图中的节点代表页面中使用的对象,包括:原始对象(如数字、字符串以及关联数组等对象)。内存图中的节点和边使用以下标签进行标记:
- 节点:使用用于构造他们的构造函数名称来标记
- 边:使用属性名称进行标记
图中的节点可以通过两种方式来持有内存:
- 直接:对象本身占用的内存;
- 隐式:引用其他对象。持有其他对象的引用,可以防止这些对象被垃圾回收(GC);
浅大小(Shallow size)
浅大小是指一个对象本身占用的内存量,不包括它引用的其他对象的内存。
保留大小(Retained size)
保留大小是指一个对象以及它通过引用可达的所有对象一起占用的全部内存大小。简单地说,如果从这个对象出发可以访问到的所有对象被释放,将能回收的内存量就是这个对象的保留大小。
对象保留树(Objects retaining tree)
对象保留树是指可以通过一系列的引用从一个特定对象出发找到其他对象的结构。在这棵树上,节点是对象,边是对象之间的引用关系。
支配者(Dominators)
如果从根出发到达任何其他对象都必须经过某个对象,那么该对象就是所谓的“支配者”。对于内存泄漏分析来说,识别支配者对象非常重要。
垃圾收集根(Garbage-collection roots)
垃圾收集根是由浏览器在从浏览器的原生代码到V8虚拟机外的JavaScript对象建立引用时创建的。这些引用称为句柄。从网页的角度看,全局窗口对象是垃圾收集根的一种类型。
对象大小和距离
在使用内存工具时,你可能会看到“距离”、“浅大小”和“保留大小”几列信息。其中,距离是指对象在JavaScript堆中到垃圾收集根的最短路径上的节点数。
理解这些术语对于深入分析和解决前端内存泄漏问题至关重要。每个术语都涉及到了如何在浏览器中管理和优化内存使用的不同方面,从而帮助前端开发者诊断和修复内存泄漏的问题。希望这篇整理的文章能够帮助您更好地理解相关概念。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容