内存管理:垃圾回收机制
2019-04-16 本文已影响0人
林键燃
JavaScript 的内存分配
在使用值之前我们需要为其分配内存,使用的过程,实际上是对分配内存进行读取和写入的操作。
什么是垃圾
但一个值我们不会再使用时,此时它占用的内存应该得到释放
我们的垃圾回收机制
JavaScript 具有垃圾回收机制(GC: Garbage Collecation)它会定期(周期性)的找出不再继续使用的值,然后释放其内存。
两种实现方式
- 标记清除
- 引用计数
标记清除
- 遍历所有可访问的对象
- 回收已不可访问的对象
JavaScript 中最常用的垃圾回收方式就是标记清除。当变量进入环境时,将其标记为“进入环境”,例如,在函数中声明一个变量。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。
引用计数
最简单的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其它对象引用它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。
缺点:循环引用时,即是该部分内存将被占用,无法得到释放。
内存管理
GC 的缺陷
GC 时,会停止相应其它操作,这是为了安全考虑。而 JavaScript 的 GC 在 100ms 甚至以上,对一般的应用还好,但对于 JS 游戏,动画连贯性要求比较高的应用,却是致命的。