zoukankan      html  css  js  c++  java
  • JavaScript之垃圾回收

        JavaScript具有自动垃圾回收机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。

    1、标记清除

        JavaScript中最常用的垃圾收集方式是标记清除。当变量进入环境(例如,在函数中声明一个变量)时,就将这个变量标记为"进入环境"。从逻辑上讲,永远不能释放进入环境的变量所占的内存,因为只要执行流进入相应的环境就可能用到它们。当执行流离开该环境时,则将其变量标记为"离开环境"。
        到2008年,绝大多数浏览器都使用标记清除的垃圾回收策略,只不过垃圾收集的间隔时间有所不同。

    2、引用计数

        另外一种不常见的垃圾收集策略叫做引用计数。引用计数的含义是跟踪记录每个值被引用的次数。当声明了一个变量并将一个引用类型值赋给该变量时,这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值的引用次数+1,反之-1。当这个值的引用次数变成0时,则说明没有办法在访问这个值了,因此就可以将该值所占的内存空间回收回来。
        但这种方式会遇到一个严重问题:循环引用。如下代码所示:
    //循环引用
    function problem() {
        var obj1 = new Object();
        var obj2 = new Object();
        obj1.otherObject = obj2;
        obj2.anotherObject = obj1;
    }

    3、性能问题

        随着IE7的发布,触发垃圾回收的变量分配、字面量或数组元素的临界值被调整为动态修正。事实上,在有的浏览器中可以触发垃圾回收过程,但不建议这么做。在IE中,调用window.CollectGarbage()方法会立即执行垃圾回收。在Opera7及更高版本中,调用window.opera.collect()也会启动垃圾回收。

    4、管理内存

        确保占用最少内存可以让页面获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保留必要的数据。一旦数据不再使用,最好将该值设置为null来释放其引用——这个做法叫做"引用解除"。这一做法适用于大多数全局变量和局部变量。局部变量会在执行流离开执行环境时自动解除。
        值得注意的是,解除一个值的引用并不意味着自动回收该值所占的内存。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。
  • 相关阅读:
    糗事百科图片爬取
    Linux文件和目录常用命令
    复习
    Win7的快捷键
    开始运行中的快捷键
    TextBox客户端JS赋值 后台获取(转载)
    window.returnValue的用法
    input的readonly属性与TextBox的ReadOnly和Enabled属性区别
    剖析 ADO.NET 批处理更新
    关于C#多线程的WaitHandle
  • 原文地址:https://www.cnblogs.com/zxj159/p/3084606.html
Copyright © 2011-2022 走看看