JavaScript垃圾回收|8月更文挑战

92 阅读2分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

1. 官方介绍:

由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。

2. 简单来说:

无用的变量对象,原始值,函数,数组等所占用的内存要释放掉,不然越积越多就会存在内存泄漏,所以javascript的就会周期性地进行垃圾回收,释放内存.

3. 垃圾回收两种机制

  • 标记清除
  • 引用计数
3.1 标记清除

当变量进入执行环境时,将变量标记为进入环境,当变量离开执行环境时,再将该变量标记为离开环境, 当垃圾收集器生命周期开始跑起来时, 开始整理清除无用的和之前已经被标记离开环境的变量,开始销毁这些变量释放占用内存.

3.2 引用计数

javascript引擎有一张引用计数,保存了内存里面所有值引用次数。如果一个值的引用次数为零,那么可以将该变量清除,释放占用内存,想要清除引用可以让变量等于null

let a = new Object() 	// 此对象的引用计数为 1(a引用)
let b = a		// 此对象的引用计数是 2(a,b引用)
a = null  		// 此对象的引用计数为 1(b引用)
b = null 	 	// 此对象的引用计数为 0(无引用)

4. 内存泄漏有哪些原因造成

  • 定时器使用不规范没有及时设置null
  • 无用全局变量一致被占用