- 变量销毁不了,一定就是内存泄漏吗?
不一定,只有在非预期的场景下,变量没有被垃圾回收,才算内存泄漏。闭包虽然内存没有被回收,但是符合我们的预期表现。【注意】这一说法没有定论,有些面试官可能会说“不可被垃圾回收就是内存泄漏”,不可较真。
- 如何检测内存泄漏
- 使用内存分析工具
- 浏览器开发者工具:Chrome 的 DevTools 提供了内存分析工具 Memory,可以监控内存使用情况
- 也可以结合 setInterval 使用 console.memory 查看内存使用的快照
- 代码审查
- 检查代码中是否有未释放的事件监听器,定时器,全局变量,确保不再需要某对象时,即使解除引用
- 性能监控
- 监控应用程序的内存使用情况,观察是否有持续增长的趋势
- 使用日志记录内存使用情况,帮助识别内存泄露的模式
- 内存泄漏的场景
- 被全局变量、函数引用,组件销毁时未被清除
window.arr = this.arr
window.print = ()={}
- 被全局事件、定时器引用,组件销毁时未被清除
this.intervalId = setInterval(()=>{
console.loh(this.arr)
},100)
- 被自定义事件引用,组件销毁时未清除
const printArr = () => {
console.log(this.arr)
}
window.addEventLisner('resize', printArr)
window.removeEventLisner('resize', printArr)