回答
- JS 具有自动垃圾回收机制,周期性执行,找出那些不再继续使用的变量,然后释放其内存。
- JS 的垃圾回收策略,从引用计数到标记清除。
- 引用计数,把「变量是否需要使用」简化为「变量是否被其他变量引用」,没有引用了则回收掉。这样带来的问题是:循环引用后无法被回收。
- 标记清除,把「变量是否需要使用」简化为「变量是否可到达」,不可到达则被回收掉。
- 不同 JS 引擎的实现方式不同,针对标记清除算法的优化也不同。比如常见的 V8 引擎,采用了「分代回收」的优化策略。
在开发中,要避免内存泄漏,需要注意的点是:不用全局变量,注意清除定时器等。
具体分析
参考资料
内存管理 - JavaScript | MDN [https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_Management]
- 一文搞懂V8引擎的垃圾回收 [https://juejin.im/post/6844904016325902344]