内存管理:垃圾回收机制

2019-04-16  本文已影响0人  林键燃

JavaScript 的内存分配

在使用值之前我们需要为其分配内存,使用的过程,实际上是对分配内存进行读取和写入的操作。

什么是垃圾

但一个值我们不会再使用时,此时它占用的内存应该得到释放

我们的垃圾回收机制

JavaScript 具有垃圾回收机制(GC: Garbage Collecation)它会定期(周期性)的找出不再继续使用的值,然后释放其内存。

两种实现方式

  1. 标记清除
  2. 引用计数

标记清除

JavaScript 中最常用的垃圾回收方式就是标记清除。当变量进入环境时,将其标记为“进入环境”,例如,在函数中声明一个变量。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标记为“离开环境”。

引用计数

最简单的垃圾收集算法。此算法把“对象是否不再需要”简化定义为“对象有没有其它对象引用它”。如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。

缺点:循环引用时,即是该部分内存将被占用,无法得到释放。

内存管理

GC 的缺陷

GC 时,会停止相应其它操作,这是为了安全考虑。而 JavaScript 的 GC 在 100ms 甚至以上,对一般的应用还好,但对于 JS 游戏,动画连贯性要求比较高的应用,却是致命的。

上一篇下一篇

猜你喜欢

热点阅读