什么是Javascript 中的垃圾回收机制?

120 阅读3分钟

什么是Javascript 中的垃圾回收机制?

简单的了解垃圾回收机制
js的垃圾回收机制,就像我们生活中的生活垃圾一样要被回收。只不过我们生活中垃圾要自己手动的扔进(回收进)垃圾站,如果不把垃圾回收到垃圾站,那我们岂不是生活在水深火热之中,js中也是一样只不过js会帮助我们自动回收垃圾(也可以说是回收内存)。正因为如此许多人不太关心js的垃圾回收机制,但是也有js没有给我们回收的情况,这种情况就是内容泄漏了。

内存的生命周期

JS环境中分配的内存, 一般有如下生命周期:

  1. 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存
示例:
//为变量分配内存
const num = 66
const str = '姬霓太美'
//为对象分配内存
const person = {
age:18,
uname:'姬霓太美'
}
//为函数分配内存
function sum (a,b) {
return  a+b
}
  1. 内存使用:即读写内存,也就是使用变量、函数等
  2. 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存

Snipaste_2023-01-06_01-17-55.png

垃圾回收的两种方法说明

所谓垃圾回收, 核心思想就是如何判断内存是否已经不再会被使用了, 如果是, 就视为垃圾, 释放掉

1、引用计数法
IE采用的引用计数算法, 定义“内存不再使用”的标准很简单,就是看一个对象是否有指向它的引用。 算法:

  1. 跟踪记录每个值被引用的次数。
  2. 如果这个值的被引用了一次,那么就记录次数1
  3. 多次引用会累加。
  4. 如果减少一个引用就减1。
  5. 如果引用次数是0 ,则释放内存。

2、标记清除法
现代的浏览器已经不再使用引用计数算法了。 现代浏览器通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的。 核心:

  1. 标记清除算法将“不再使用的对象”定义为“无法达到的对象”。
  2. 就是从根部(在JS中就是全局对象)出发定时扫描内存中的对象。 凡是能从根部到达的对象,都是还需要使用的。
  3. 那些无法由根部出发触及到的对象被标记为不再使用,稍后进 行回收。

总结

1、垃圾回收机制(Garbage Collection) 简称 GC
2、垃圾回收机制:所谓垃圾回收,就是判断内存是否不再会使用了,如果是,就视为垃圾释放内存。
3、内存泄漏就是:不再用到的内存没有得到释放就叫做内存泄漏。
4、js的垃圾回收机制存在的意义:防止内存泄漏
5、内存的生命周期:三个部分、内存分配、内存使用、内存回收。
6、垃圾回收机制的两种方法:引用计数法、标记清除法,现在常用的是引用计数法。