首页 > 试题广场 >

JS中的垃圾回收机制

[问答题]

JS垃圾回收机制:

内存就那么多,用不到的变量,就清除掉,才能保证内存可以被循环利用

常用的两种方法:标记清除、引用计数


标记清除:

function test(){

var a = 10; //被标记"进入环境"

var b = "hello"; //被标记"进入环境"

}

test(); //执行完毕后之后,a和b又被标记"离开环境",被回收

垃圾回收机制先给所有变量加上标记,然后去掉当前“环境中的变量”和“被环境中的变量引用的变量(闭包)”的标记,剩下的就是要删除的变量。


引用计数:

记录一个变量现在被引用次数,为0时就将其清除掉,不为0时就不清除,但常常会导致内存泄露(变量占用内存却没有使用,也没有被清除),举例:

let arr = [1,2,3,4];

console.log("hello world");

[1,2,3,4]占据着一块内存,它被arr引用,因此这块内存的引用次数为1。可是我们并没有使用arr,但这块内存却无法被释放,这就出现了内存泄漏的问题,因此我们需要使用arr=null来将这块内存的引用次数变为0,才可以释放这块内存

编辑于 2022-03-09 07:47:21 回复(0)

javascript解释器可以检测到变量是否还使用。

方法:标记法和引用计数法。

标记法:当变量进入环境时,数字加一。如果变为0就释放内存。

编辑于 2020-02-13 12:52:17 回复(1)