js系列四:内存回收机制

一、垃圾回收的必要性
  下面这段话引自《JavaScript权威指南(第四版)》
  由于字符串、对象和数组没有固定大小,所有当他们的大小已知时,才能对他们进行动态的存储分配。JavaScript程序每次创建字符串、数组或对象时,解释器都必须分配内存来存储那个实体。只要像这样动态地分配了内存,最终都要释放这些内存以便他们能够被再用,否则,JavaScript的解释器将会消耗完系统中所有可用的内存,造成系统崩溃。
  这段话解释了为什么需要系统需要垃圾回收,JS不像C/C++,他有自己的一套垃圾回收机制(Garbage Collection)。JavaScript的解释器可以检测到何时程序不再使用一个对象了,当他确定了一个对象是无用的时候,他就知道不再需要这个对象,可以把它所占用的内存释放掉了。例如:

var a = "one";
var b = "overide a";
a = b;

js系列四:内存回收机制_第1张图片

var a = "one";
var b = "overide a";
a = b;
console.log(a);
console.log(b);
var a = b;
console.log(a);

js系列四:内存回收机制_第2张图片
这段代码运行之后,“one”这个字符串失去了引用(之前是被a引用),系统检测到这个事实之后,就会释放该字符串的存储空间以便这些空间可以被再利用。

二、垃圾回收原理浅析

现在各大浏览器通常用采用的垃圾回收有两种方法:标记清除、引用计数。

1、标记清除
  这是javascript中最常用的垃圾回收方式。当变量进入执行环境是,就标记这个变量为“进入环境”。从逻辑上讲,永

你可能感兴趣的:(内存回收机制,javascript入门到进阶)