内存生命周期
- 分配你所需要的内存
- 使用分配到的内存(读, 写)
- 不需要时将其释放/归还
标记-清除算法
这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”.
这个算法假定设置一个叫做根root的对象(在 Javascript 里,根是全局对象). 定期的, 垃圾回收器将从根开始, 找所有从根开始引用的对象, 然后找这些对象引用的对象, 从根开始,垃圾回收器将找到所有可以获得的对象和所有不能获得的对象.
从 2012 年起, 所有现代浏览器都使用了标记-清除内存回收算法。所有对 JavaScript 垃圾回收算法的改进都是基于标记-清除算法的改进.
什么是内存泄漏
前言
使用不当的闭包将会在IE(IE9之前)中造成内存泄漏
现象
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果, 本质上讲, 内存泄露就是不再被需要的内存, 由于某种原因, 无法被释放.
什么是GC
GC是Garbage Collection的缩写,意为垃圾回收
垃圾是程序不用的内存空间(可能是在之前用过了,以后不会再用的)。那么GC就是负责收走垃圾的,因为他工作在JavaScript引擎内部,所以对于我们前端开发者来说,GC在“一定程度上”是悄无声息工作的(注意此处的加引号部分)。
GC做了什么
- 找到内存空间中的垃圾。
- 回收垃圾,让程序员能再次利用这部分空间
自动 GC 的问题
尽管自动 GC 很方便, 但是我们不知道 GC 什么时候会进行. 这意味着如果我们在使用过程中使用了大量的内存, 而 GC 没有运行的情况下, 或者 GC 无法回收这些内存的情况下, 程序就有可能假死, 这个就需要我们在程序中手动做一些操作来触发内存回收.