什么是Javascript 中的垃圾回收机制?
简单的了解垃圾回收机制
js的垃圾回收机制,就像我们生活中的生活垃圾一样要被回收。只不过我们生活中垃圾要自己手动的扔进(回收进)垃圾站,如果不把垃圾回收到垃圾站,那我们岂不是生活在水深火热之中,js中也是一样只不过js会帮助我们自动回收垃圾(也可以说是回收内存)。正因为如此许多人不太关心js的垃圾回收机制,但是也有js没有给我们回收的情况,这种情况就是内容泄漏了。
内存的生命周期
JS环境中分配的内存, 一般有如下生命周期:
- 内存分配:当我们声明变量、函数、对象的时候,系统会自动为他们分配内存
示例:
//为变量分配内存
const num = 66
const str = '姬霓太美'
//为对象分配内存
const person = {
age:18,
uname:'姬霓太美'
}
//为函数分配内存
function sum (a,b) {
return a+b
}
- 内存使用:即读写内存,也就是使用变量、函数等
- 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存
垃圾回收的两种方法说明
所谓垃圾回收, 核心思想就是如何判断内存是否已经不再会被使用了, 如果是, 就视为垃圾, 释放掉
1、引用计数法
IE采用的引用计数算法, 定义“内存不再使用”的标准很简单,就是看一个对象是否有指向它的引用。
算法:
- 跟踪记录每个值被引用的次数。
- 如果这个值的被引用了一次,那么就记录次数1
- 多次引用会累加。
- 如果减少一个引用就减1。
- 如果引用次数是0 ,则释放内存。
2、标记清除法
现代的浏览器已经不再使用引用计数算法了。
现代浏览器通用的大多是基于标记清除算法的某些改进算法,总体思想都是一致的。
核心:
- 标记清除算法将“不再使用的对象”定义为“无法达到的对象”。
- 就是从根部(在JS中就是全局对象)出发定时扫描内存中的对象。 凡是能从根部到达的对象,都是还需要使用的。
- 那些无法由根部出发触及到的对象被标记为不再使用,稍后进 行回收。
总结
1、垃圾回收机制(Garbage Collection) 简称 GC
2、垃圾回收机制:所谓垃圾回收,就是判断内存是否不再会使用了,如果是,就视为垃圾释放内存。
3、内存泄漏就是:不再用到的内存没有得到释放就叫做内存泄漏。
4、js的垃圾回收机制存在的意义:防止内存泄漏
5、内存的生命周期:三个部分、内存分配、内存使用、内存回收。
6、垃圾回收机制的两种方法:引用计数法、标记清除法,现在常用的是引用计数法。