当前位置:网站首页>js的垃圾回收机制
js的垃圾回收机制
2022-08-03 04:27:00 【weixin_46051260】
垃圾回收机制称Garbage Collection简称GC。js的垃圾回收机制就是定时回收闲置资源的一种机制,每隔一段时间,执行环境都会清理掉内存中一些没用的变量释放他做占用的内存
核心思想:找到没用的变量,释放他们的内存
1)标记清除
标记清除是现在最常使用的垃圾回收策略,使用标记清除作为垃圾回收机制的浏览器,会在垃圾回收程序进行时,有如下步骤:
- 标机内存中所有的变量
- 把在上下文(全局作用域,脚本作用域)中声明的变量,以及在全局被引用的变量的标记删除掉,剩下的所有带标记的变量就被视为要删除的变量,垃圾回收执行时释放他们所占用的内存
- 内存清理,清除垃圾
// 变量 color,dog 在全局环境下声明,不会被清除
const color = 'red';
var dog = '金毛';
{
let cat = 'kitty'; // 变量 cat 在块作用域中声明,且没有被全局所引用,所以会在下一次垃圾回收执行时,释放其内存
}
2)引用计数
引用计数是一种不常用的垃圾回收策略,主要核心思路就是记录值被引用的次数,一个值被赋给变量,引用次数+1,这个变量在某个时刻重新赋了一个新值,旧值的引用次数-1变为了0,在下次垃圾回收程序进行时就会释放他的内存。
引用技术存在的问题:循环引用
function fn() {
const obj1 = new Object()
// new Object 在堆内存中创建了一个对象1 {} 这个值被赋值给obj1 于是引用次数 + 1
const obj2 = new Object()
// new Object 在堆内存中创建了一个对象2 {} 这个值被赋值给obj2 于是引用次数 + 1
obj1.a = obj2; // obj2 被赋值给 obj1的a属性 于是对象1的引用次数 1+1 = 2
obj2.a = obj1; // obj1 被赋值给 obj2的a属性 于是对象2的引用次数 1+1 = 2
}
// 此时两个对象之间相互引用,如函数多次调用,又会重新执行多次函数体,又会多了n个相互引用的对象占用内存
obj1.a = null;
obj2.a = null;
// 通过设置为 null 可以切断两者之间的引用,在下次回收时就会清理释放掉
边栏推荐
猜你喜欢

正则表达式绕过

DC-5靶场下载及渗透实战详细过程(DC靶场系列)

Test drive: project management module - curd development project

电子设备行业智能供应链系统:打破传统供应链壁垒,提升电子设备企业管理效能

Shenzhen Offline Registration|StarRocks on AWS: How to conduct rapid and unified analysis of real-time data warehouses

DOM破环和两个实验的复现

测开:项目管理模块-项目curd开发

我将GuiLite移植到了STM32F4开发板上

刚上线就狂吸70W粉,新型商业模式“分享购”来了,你知道吗?

UV 裂解的生物素-PEG2-叠氮|CAS:1192802-98-4生物素接头
随机推荐
工程制图-齿轮
【Harmony OS】【ARK UI】ets使用startAbility或startAbilityForResult方式调起Ability
Assembly answers
数值类型转换02
MediaRecorder录制屏幕时在部分机型上报错prepare failed:-22
Mysql如何建立索引实现语句优化
数字化时代,企业如何建立自身的云平台与商业模式的选择?
Browser listens for tab closing
直播|StarRocks 技术内幕 :低基数全局字典优化
计网试卷概念
v-on指令:为元素绑定事件
汇编书摘抄
Shenzhen Offline Registration|StarRocks on AWS: How to conduct rapid and unified analysis of real-time data warehouses
工程水文学试题库
电子设备行业智能供应链系统:打破传统供应链壁垒,提升电子设备企业管理效能
浏览器监听标签页关闭
第3周 用1层隐藏层的神经网络分类二维数据
MySQL 出现 The table is full 的解决方法
汇编题答案
path development介绍