JS的GC整理

内存泄露

什么是内存泄露?

内存泄露就是应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或可用内存池回收。这句话对于所有需要GC的语言都适用,当然包括JS。

JS的内存回收方法主要就是“标记清除”和“引用计数”。

如何判断内存泄露?

经验法则是,如果连续五次垃圾回收之后,内存占用一次比一次大,就有内存泄漏。这就要求实时查看内存占用。

查看内存可以使用chrome浏览器中的开发者工具,Performance页签可以进行内存快照的监控。

内存泄露的一般场景是什么?

1 意外的全局变量

2 被遗忘的计时器或回调函数

3 脱离 DOM 的引用

4 闭包

WeakSet 和 WeakMap

WeakSet 和 WeakMap就是弱引用,在java中也存在这个概念,就是该数据结构不会影响引用变量的计数次数。