千家信息网

怎样用Chrome开发者工具分析javascript的内存回收

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章为大家展示了怎样用Chrome开发者工具分析javascript的内存回收,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天在知乎看到一个问题:"通过
千家信息网最后更新 2025年12月02日怎样用Chrome开发者工具分析javascript的内存回收

本篇文章为大家展示了怎样用Chrome开发者工具分析javascript的内存回收,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

今天在知乎看到一个问题:"通过 createElment 创建的元素,不 append 到 html 中,那么此元素被自动销毁的时机是什么?"

比如:


var a;
(function(){
a = document.createElment("div");
})();


a = "Hello";

此时浏览器能否正确销毁和回收这个没有被 append 到页面上 dom 元素?

如果此元素不会被主动销毁或者回收,那么通过什么方法将其销毁呢?

我们知道,这种通过 document.createElment 创建出来的元素,是没有 parentNode 的,因为它创建时候并没有被添加到页面中。那么如何才能销毁它?

当一个对象占用(使用)内存时,使用两种方式:直接和间接。直接占用内存很容易理解,而间接占用内存指对象中保持了对其它对象的引用,这样垃圾回收(GC 机制)就无法对那些对象进行回收。

在 GC 中一个很重要的概念就是 GC 根(GC root),当 javascript 程序中的某一个对象无法从 GC root 遍历到时,这个对象使用的内存就会被回收。

那么我们从原理角度分析一下最上面的代码,当执行 document.createElment("div") 时创建了一个 div 的 dom 对象,并赋值给了 a 变量,随后又把一个字符串 "Hello" 赋值给了 a 变量。此时 a 的值是 "Hello",类型是字符串。而之前创建的 div 对象已经不能通过 GC 遍历到,因此 div 对象被回收了。如果 div 对象没有被回收的话,我们观察如上代码,这个对象已经无法被任何变量所引用,因此就会产生内存泄漏。

下面我们通过使用 Chrome 的开发者工具分析一下如上代码。

首先新建一个空白 html 页面,页面里面什么代码也不写。

为了防止干扰,在 chrome 中新建一个隐身窗口,在隐身窗口中打开这个空白页面。

按 F12 或者 Ctrl + Shift + I,调出 devtools,选中 Profile 面板。


这时会记录此刻的内存使用情况


按 ESC 打开 Console,或者手动切换到 Console 面板,输入

var a;(function(){    a = document.createElment("div");})();

然后按 Ctrl + E,或者再次点击 Take Heap Snapshot 按钮,这时又会记录一个 Snapshot2,选择 Comparison,可以将本次内存和上次记录的进行对比。

差异比较多,好多可以不用管,看最后一个:


选中之后下面有详细:


Detached DOM 的意思是这个 DOM 是游离在页面 DOM 之外的。

运行代码

a = "Hello";

继续上面的步骤后,Snapshot3 和 Snapshot2 相比,DOM 被 Delete 了

Snapshot3 和 Snapshot1 相比,多了字符串 "Hello"

而通过 Heap Allocation Timeline 可以观察到 DOM 到底在什么时候被 GC 的。


上述内容就是怎样用Chrome开发者工具分析javascript的内存回收,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

对象 内存 页面 代码 元素 分析 工具 开发者 开发 变量 字符 字符串 内容 如上 就是 技能 时候 知识 空白 面板 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎样安装数据库中的文件夹 幼儿园网络安全部署会议记录 河南通信软件开发服务有哪些 服务器自检raid卡型号 湘潭软件开发培训学校电话 网络安全考研院校 信阳互联网科技有限公司 上海互联网科技工程 国内网络安全防御能力 网络技术初级证怎么考 操作系统在软件开发中的应用 查询数据库中数据大小 数据库连接池能提高多少性能 计算机网络技术笔记本电脑轻薄 数据库制作超市管理系统 迷你世界ice服务器真的有用吗 ip12连接服务器时出现问题 高配置电脑对软件开发有用 数据库无法删除行 手游死亡不掉落的服务器 发送包无数据库 江西戴尔服务器虚拟化安装云主机 数据库系统最大的特点是 计算机网络技术三级考试大纲 如何查询数据库表中的相关 流放之路旋涡数据库 软件开发环境与工具表格 网络安全领导内设机构 python曲线数据库叫啥 牡丹江帅辉互联网科技工作室
0