浅谈JS垃圾回收机制(GC)

2022-04-28  本文已影响0人  小陈wx

1.什么是垃圾?什么是垃圾回收?

//执行下面代码会导致内存占用超过上限,可能引起页面崩溃
function grow() {
   var x = []
   let str = new Array(100000).join('x');
   // 1亿个
   for (let i=0; i<100000000; i++) {
      x.push(str)
   }
}
document.getElementById('grow').addEventListener('click', grow);

2.js中的数据如何使用内存?

//执行下面函数可以在控制台中查看到出现了一个Closure对象其中包含变量name属性
function fn(){
  var name="abc";
  return ()=>{
      debugger;
      console.log(name)
  }
}
var innerFn=fn();
innerFn();

3.JS何进行垃圾回收?

由上诉答案得知JS运行过程中数据会存入栈空间和堆空间中,所以垃圾回收也可以分为两个部分来讨论:

1.栈内存垃圾回收:
2.堆内存垃圾回收:

4.GC执行时机?

5.了解了JS垃圾回收机制以后,我们能干嘛?

总的来说,js有一套自己的GC机制,它能自动帮我们的程序处理内存垃圾,通常情况下我们创建的变量不用之后会被自动释放,少数情况下我们的一些操作会让GC机制无法帮我们自动完成清理,比如:变量挂载到全局根对象下,闭包函数未执行,引用dom节点操作后不清空,事件监听完成后不处理,计时器使用后不清除,写代码的过程中避免掉这些操作能减轻垃圾回收器的负担。

上一篇 下一篇

猜你喜欢

热点阅读