JS:浏览器的垃圾回收机制(*****五颗星)
1.垃圾回收的概念
js的内存模型分为堆和栈,堆和栈有不同的垃圾处理方式。
栈是有连续的内存空间,不使用的空间会自动回收,其实也不是回收,就是栈顶指针会下移,操作系统就是知道那部分空间是能被使用的,那部分空间不会被清除,但是新的内容可以覆盖他。
堆不是连续的内存空间,其有垃圾回收机制:有标记清除和引用计数,也可以手动清除。
垃圾回收:JavaScript代码运行时,需要分配内存空间来储存变量和值。当变量不在参与运行时,就需要系统收回被占用的内存空间,这就是垃圾回收。
回收机制:
- Javascript 具有自动垃圾回收机制,会定期对那些不再使用的变量、对象所占用的内存进行释放,原理就是找到不再使用的变量,然后释放掉其占用的内存。
- JavaScript中存在两种变量:局部变量和全局变量。全局变量的生命周期会持续要页面卸载;而局部变量声明在函数中,它的生命周期从函数执行开始,直到函数执行结束,在这个过程中,局部变量会在堆或栈中存储它们的值,当函数执行结束后,这些局部变量不再被使用,它们所占有的空间就会被释放。
- 不过,当局部变量被外部函数使用时,其中一种情况就是闭包,在函数执行结束后,函数外部的变量依然指向函数内部的局部变量,此时局部变量依然在被使用,所以不会回收。
2.垃圾回收的方式
浏览器通常使用的垃圾回收方法有两种:标记清除,引用计数。
1.标记清除
- 标记清除是浏览器常见的垃圾回收方式,当变量进入执行环境时,就标记这个变量“进入环境”,被标记为“进入环境”的变量是不能被回收的,因为他们正在被使用
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
前端面试题 文章被收录于专栏
前端面试的一些常问问题、问题的具体实现(可直接运行)以及底层原理