因为自动垃圾回收机制的存在,我们在开发时好像并不用那么关心内存的使用问题,内存的分配与回收都完全实现了自动管理。但是根据我自己的开发经验,了解内存机制有助于自己清晰的认知到自己写的代码在执行过程中都发生了什么,从而写出性能更加优秀的代码。因此在成为更好的前端开发者的道路上,关心内存空间管理是一件非常重要的事情。

我们可以通过一个非常简单的例子来了解内存空间的使用过程。

var a = 20;
alert(a + 100);
a = null;

上面的三条语句,可以对应如下三个过程。

  • 分配内存

  • 使用分配到的内存

  • 不需要时释放内存

分配内存与使用内存都比较好理解,就是字面意思。我们需要重点理解的是第三个过程。这里涉及到JavaScript垃圾回收机制的实现原理。

JavaScript的垃圾回收实现主要依靠于”引用“的概念。当一块内存空间中的数据能够被访问时,垃圾回收器就认为”该数据能够被获得“。不能够被获得的数据,就会被打上标记,并回收内存空间。这种方式叫做 标记-清除算法。

这个算法会设置一个全局对象,并定期的从全局对象开始查找,垃圾回收器将会找到所有可以获得与不能够被获得的数据。

因此在上面的简单例子中,当我们将a设置为null,那么刚开始分配的20,就无法被访问到了,很快就会被自动回收。

注意:在局部作用域中,当函数执行完毕,局部变量也就没有存在的必要了,因此垃圾收集器很容易做出判断并回收。但是在全局中,变量什么时候需要自动释放内存空间则很难判断,因此我们在开发中,需要尽量避免使用全局变量。如果使用了全局变量,最好建议不再使用时,通过`a = null` 这样的方式释放引用,以确保能够及时回收。

results matching ""

    No results matching ""