• Javascript手记-垃圾收集


        如果有人问.net的垃圾回收,大家会马上想到gc,那如果有人问你javascript如何进行内存管理的呢?挠挠头,一口香瓜,听我细细道来!

         javascript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存,大体的原理是找出那些不在使用的变量,然后释放它占用的内存,为此,垃圾收集器会按照固定的时间间隔周期的执行这一操作。(让我想起了oc中内存管理是通过引用计数来判定对象是否使用的)下面介绍一下javascript中常用的垃圾回收方式.(没想到这时候的香瓜这么甜,打几行字就得来几口。)

    (1)标记清除

       当变量进入环境时候,就将这个变量标记为进入环境。垃圾收集器会给存储在内存中的所有变量都加上标记,然后他会去掉环境中的变量以及被环境中的变量引用的变量的标记,再次之后再被加上标记的变量被视为准备删除的变量。因为环境中的变量已经无法访问这些变量了。

    (2)引用计数

       跟踪记录每个值引用的次数。当声明一个变量并且将一个引用类型值赋给该变量时,这个值得引用计数就是1.如果同一个值又被付给另一个变量。该值引用次数加1,反之,减法操作。当这个值得引用次数变为0时候,则说明没有办法在访问这个值了。可以回收内存空间了。当垃圾收集器再次运行时。他就会释放引用次数为0的值。但是引用计数存在着循环引用的问题。

    var element=document.getElementById("ele");
    var obj=new Object();
    obj.element=element;
    element.obj=obj;

        为了避免这种问题我们只能手动断开连接

    obj.element=null
    element.obj=null
    

      (在object-c中为了避免这种引用的关系,采用了强引用和弱引用的概念)

    小结:

         javascript变量可以保存2中类型的值:基本类型和引用类型   基本类型(undefined,null,boolean,number, string) 这里的string是值类型

    切记与.net中string引用类型弄混,.net处理string类型还单独用了一个集合类存储.

    (1)基本类型的值在内存中占据固定大小的空间,因此被保存在栈内存中。

    (2)从一个变量像另一个变量赋值基本类型的值,会创建这个值得一个副本。

    (3)引用类型的值是对象,保存在堆内存中

    (4)包含引用类型值得变量并不是对象本身,而是一个指向该对象的指针

    (5) 从一个变量赋值引用类型的值,赋值的是指针,因此2个变量都指向同一个对象

    越来越感觉javascript对象分配,内存管理和.net中new关键字创建对象有很多相似之处.

      

  • 相关阅读:
    html5学习系列之ef类标签
    html5学习系列之cd标签
    Java学习系列——xml学习基础
    html5学习系列——b标签
    为什么我要使用Linux,使用Linux的十个理由。
    设置Linux系统的空闲等待时间TMOUT的方法和Linux反空闲设置的两种方法
    创建动态MSSQL数据库表的方法
    SQL SERVER 自增列的方法
    XtraBackup构建MySQL主从环境的方法
    如何查看MySQL执行计划呢?
  • 原文地址:https://www.cnblogs.com/mongo/p/4442643.html
Copyright © 2020-2023  润新知