JavaScript的垃圾回收机制

目录

一、什么是js的垃圾回收机制

二、为什么需要垃圾回收机制

三、垃圾回收机制的方法及流程

1、JS中最常见的垃圾回收方式是标记清除

 2、还有一种方式是引用计数


一、什么是js的垃圾回收机制

1、垃圾回收机制主要是由垃圾收集器(garbage collector,简称GC)的后台进行监控、清理对象,并及时回收空闲内存,并且会按照固定的时间间隔周期性的执行。

2、垃圾收集器最主要的是监控数据的可达性

所谓的可达性就是以某种方式可以访问或者可调用的值,它们因为可达性而不被清理。

(1)有一组固有的可达值,它们被称为“根”

例如:

  • 正在被调用的函数的局部变量和参数
  • 相关嵌套调用链上的其他函数的变量和参数
  • 全局变量
  • 还有一些其他的,引擎内部调用的变量

(2)所有从根引用或引用链访问的对象

(3)举个栗子:

//user 具有对象的引用
let user = {
    name:"zhou"
};

 

 全局变量“user”引用变量“name:“zhou””。“name:‘zhou’”的“name”属性存储一个基本类型,这时对象zhou(简称)是可达的。

但是当user设置为null以后,引用消失,这时zhou对象就变得不可达,最后会被从内存中清理掉

user = null;

 

 不管多复杂的例子,只要是不可达,那么最后都会被回收;

二、为什么需要垃圾回收机制

程序的运行需要一定的内存。对于持续运行的服务进程,必须及时释放内存,否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。

三、垃圾回收机制的方法及流程

1、JS中最常见的垃圾回收方式是标记清除

实现流程:

(1)垃圾回收器,标记所有根变量

 

(2)标记环境中的变量的引用。

 

(3)标记所有引用链上的对象,所有被访问的对象都被标记和记住,方便以后不再访问同一个对象多次

 

(4)垃圾回收器完成内存清除工作,销毁那些未带标记的值并回收他们所占用的内存空间。

 2、还有一种方式是引用计数

实现流程:

(1)先声明一个变量,并将一个引用类型的值赋给该变量,那么这个引用类型的引用次数为1,计数为1

(2)如果同一个引用类型的值又赋给其他变量,那么这个引用类型的值被引用的次数就会加一,引用次数为2,计数2,并以此类推;

(3)如果被该引用类型的值赋值的变量,被赋值了其他的引用类型的值,那么该类型的值的引用次数就需要减一。

(4)当该引用类型的值的引用次数为0,就说明没有变量被该引用类型的值赋值,所以就没有办法访问到这个引用类型的值。

(5)周期一到,垃圾收集器就会释放掉引用次数计数为0的引用类型的值所占的内存。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值