js 垃圾回收机制
2021-01-11 本文已影响0人
一只章鱼哥
Javascript 具有自动垃圾回收机制,会定期对那些我们不再使用的变量、对象所占用的内存进行释放
Javascript 的垃圾回收机制
Javascript 会找出不再使用的变量,不再使用意味着这个变量生命周期的结束。Javascript 中存在两种变量——全局变量和局部变量,全部变量的声明周期会一直持续,直到页面卸载
而局部变量声明在函数中,它的声明周期从执行函数开始,直到函数执行结束。在这个过程中,局部变量会在堆或栈上被分配相应的空间以存储它们的值,函数执行结束,这些局部变量也不再被使用,它们所占用的空间也就被释放
垃圾回收的两种实现方式
1.标记清除
当变量进入执行环境时标记为“进入环境”,当变量离开执行环境时则标记为“离开环境”,被标记为“进入环境”的变量是不能被回收的,因为它们正在被使用,而标记为“离开环境”的变量则可以被回收
2.引用计数
统计引用类型变量声明后被引用的次数,当次数为 0 时,该变量将被回收
但是引用计数的方式,有一个相对明显的缺点——循环引用
内存泄露问题
本质上讲, 内存泄露就是不再被需要的内存, 由于某种原因, 无法被释放.
常见的内存泄露有:
1.全局变量照成内存泄露(全局变量占用内存过大)
2.未销毁的定时器和回调函数照成内存泄露
3.闭包照成内存泄露(外部变量依然引用了内部函数的变量)