JavaScript中引起内存泄露的操作主要与不恰当的引用管理和资源分配有关。
当两个或多个对象相互引用,形成一个闭环,而这些对象又不再被外部所引用时,垃圾回收器无法回收它们,导致内存泄露。
避免方法:
WeakMap
或WeakSet
来存储对象引用,这样当对象没有其他强引用时,垃圾回收器仍然可以回收它们设置的 setTimeout
、setInterval
或事件监听器(如 click
事件)如果未被正确清除,会一直持有对回调函数及其上下文的引用,阻止它们被回收
避免方法:
clearTimeout
或clearInterval
来取消不再需要的定时器removeEventListener
移除事件监听器在操作DOM时,如果闭包或者其他方式意外持有了对DOM元素的引用,即使DOM元素已从页面中移除,这些引用也可能阻止DOM节点及其相关子树被回收
避免方法:
null
赋值给不再使用的DOM引用,明确断开引用关系全局变量在整个应用程序生命周期内都可访问,如果不当使用,容易导致不必要的内存占用
避免方法:
应用程序内部创建的缓存、对象池等,如果没有有效的清理机制,随着时间积累,可能会占用大量内存
避免方法: