js的垃圾回收是用的引用计数还是标记清除(如果设置x=null我想问下x会不会被JS的垃圾清理机制清理掉)

作者:jcmp      发布时间:2021-08-20      浏览量:16492
js的垃圾回收是用的引用计数还是标记清除两者都是。引用计数是被动清除,标记是主动清除。vara;a=null;//给了一个清除标记,浏览器马上就会回收这个变量的内存同问。。。如果设置x=null我想问下x会不会被JS的垃圾清理机制清理掉垃圾

js的垃圾回收是用的引用计数还是标记清除


两者都是。
引用计数是被动清除,
标记是主动清除。
vara;
a=null;//给了一个清除标记,浏览器马上就会回收这个变量的内存

同问。。。


如果设置x=null我想问下x会不会被JS的垃圾清理机制清理掉


垃圾清理是针对对象的,不是针对某个标示符的。
  对于值类型,函数执行后,如果其所在作用域并未被应用,会立即释放。
  要销毁一个对象,必须要消除一个对象的所有外部引用。Javascript
的存储单元回收机制采用的是引用计数法:创建一个对象后,如果它的引用被存储在变量中,它的引用计数就是 1
;当它的引用被复制并存储在另一个变量中,引用计数就增加 1 ;当保存这个引用的一个变量被某个新值覆盖,引用计数减少 1
;以此类推,当一个对象的引用计数为 0 时,它才会被销毁。
varp

js 中垃圾回收机制能将闭包不用的变量回收吗


理论上不回收。因为闭包中的变量不会被回收这是闭包的特性之一。
但是实际上不同的浏览器实现的可能不一样。一些高端浏览器如果确认这个变量没有且不会再被使用的话,也可能将其回收。
找到stackoverflow上面的一个讲的相对详细的答案:
http://stackoverflow.com/questions/24468713/javascript-closures-concerning-unreferenced-variables

当然是可以的
再看看别人怎么说的。

返回顶部 返回顶部 返回顶部