javaScript 垃圾收集

Posted rushi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript 垃圾收集相关的知识,希望对你有一定的参考价值。

  垃圾收集说白了就是将那些已经不用的东西收集起来,清理掉,释放出被它们所占用的空间。

  javascript有垃圾自动收集机制,也就是说,我们在开发时就不用再考虑内存的问题。内存的分配以及占用的内存回收都可以自动管理。这一种方式对于我这种经常忘记内存的人还是很友好的。垃圾收集机制的原理是找到那些不再继续使用的变量,释放其占用的空间。垃圾收集器会按照一定的时间间隔对垃圾进行这一操作。

  局部变量,只又在这个函数执行时才存在。在执行函数也是会为局部变量分配一定的内存空间,存储值,以便在执行过程中使用,直到函数执行结束。函数执行结束后,这些局部变量就没有什么用了,但是分配给他们的内存空间还没有释放。此时,就需要将这些空间释放出来,以便将来使用。因此,就需要垃圾收集器跟踪哪个变量没有用,将没有用的变量打上标记,以便于将来的回收。

1.标记清除

 标记清除是最常用的方式。当我们在函数中声明一个变量时,那就意味这个变量已经进入了环境,就可以将这个变量标记“进入环境”,当变量离开环境的时候,将这个变量标记为“离开环境”。

  这个时候就会有点疑惑,那我们要使用什么方式来标记变量。比如:可以翻转某个特殊的位置来记录一个变量何时进入环境。其实采用什么标记方式不重要,重要的是我们采取什么样的策略。

  垃圾收集器在运行的时候会给内存中所有的变量都加上标记,然后,去掉环境中的变量和被环境中的变量引用的变量的标记,之后再被加上标记的变量就是要被删除的变量。销毁那些带标记的值,并收回它们占用的空间。

2.引用计数

  引用计数就是记录每个值被引用的次数。

  当声明一个变量,再将一个引用类型的值赋给该变量时,那么该值得引用次数就是1。如果再将通一个值赋给另外一个变量,那么它的引用次数加1。如果对这个值得引用的变量又取了另外一个值,那么该值的引用次数减1。当引用次数变为0的时候,说明不可以访问这个值了,就可以将其占用的内存空间释放。当垃圾收集器运行的时候,会将引用次数为零所占用的空间。

3.管理内存

  虽然JavaScript有垃圾处理机制,但是仍然存在问题。说由于安全方面的因素,分配给web浏览器的空间比分配给桌面程序的少。主要是怕JavaScript的网页耗尽系统内存导致系统奔溃。

  确保占用的内存让页面获得更好的性能。优化内存的最佳方式,就是减少保存的数据。一旦这个数据不再有用,可以解除引用。将值设置为null来释放引用。解除引用并不会将占用的空间释放。解除引用主要是为了让这个值脱离执行环境,方便垃圾收集器运行时会将空间回收。

  function createPer(name){

    var localPer=new Object();

    localPer.name=name;

    return localPer;

  }

  var globalPer=createPer("Rose");

  globalPer=null;  //解除globalPer的引用

以上是关于javaScript 垃圾收集的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript中的垃圾收集机制

javascript垃圾收集

javaScript垃圾收集机制详细解析

垃圾收集机制

垃圾收集机制

JavaScript:处理垃圾收集