Javascript的垃圾回收机制
2018-05-25 本文已影响0人
SailingBytes
为避免内存泄露,JavaScript 具有垃圾收集机制。
内存泄漏:指由于疏忽或错误造成程序未能释放已经不再使用的内存。一直占用内存,造成物理内存溢出。
垃圾收集机制:指管理代码执行过程中使用的内存,找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行。
具体体现
函数内部的局部变量,待该函数执行完毕,执行过程中所造成的内存将被释放。
全局变量直到浏览器卸载页面才会被释放内存。
闭包中由于内部函数的原因,外部函数并不能算是结束。
标记清除
垃圾回收器在运行时候会给储存在内存中的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的变量的标记(闭包)。
余下的变量将被视为准备删除的变量(原因:环境中的变量已经无法访问这些变量了)。
最后,垃圾回收器完成内存清除工作,销毁那些带标记的值并回收它们所占用的内存空间。
如何优化内存分配?
全局变量只保存必要的数据;
若无必要保存数据,采用局部变量存储;
一旦数据不再有用,最好将值设置为 null(解除引用)。