javascipt具有自动垃圾回收机制

  局部变量只在函数执行过程中存在,在这个过程中,会为局部变量在栈上(或堆)内存分配相应空间,来储存他们的值,当函数执行完,局部变量就没有存在的必要了,所以这个时候可以释放他们的内存。而垃圾收集器必须跟踪那个变量有用,那个变量没用,对不用的变量打上标记,以便回收。

  

标记清除:

  当变量进入环境时,就将这个变量标记为”进入环境“,当离开环境时标记为”离开环境”等待内存回收。

  

引用计数:

  引用计数就是跟踪记录每个值被引用的次数,当声明一个变量,并将一个应用类型值赋值给该变量, 则这个值的引用次数就是1,如果同一个值又被引用给另外一个变量,则这个值的引用次数加一,如果包含这个值引用的变量又取另外的值,这个值的引用减一。

  当引用次数为0时,说明没办法访问这个值,因而就可以将其占用的内存空间回收。

  引用计数的问题:循环引用

  

function cricle(){
var objA = new Object();
var objB = new Object(); objA.someObj = objB;
objB.someObj = objA;
}
//这个例子中objA和objB通过属性相互引用,引用次数都是2,函数执行完后他们的引用次数永远都不会是0,将无法回收。IE中的一部分对象是com,采用的引用计数的回收机制。 为了避免循环引用问题,可以手动消除循环引用
函数执行完后:
objA.someObj = null;
objB.someObj = null;
切断了与之前引用值之间连接,下次垃圾收集器就会删除这些值回收内存。

  管理内存:

    通常浏览器的可用内存是比分配给桌面应用程序少的,为提升性能一般只为执行代码保存必要的数据,一旦数据不再用,最后通过将其置为null,来释放器引用,即解除引用。

function createPerson(name){
var localPerson = new Object();
localPerson.name = name; return localPerson;
} var globalPerson = createPerson("yangxunwu"); 执行代码段。。。 手动解除引用。
globalPerson = null;

  createPerson()创建了全局变量globalPerson后,当不再使用这个数据时手动解除引用,等待下次垃圾收集器运行时回收,而不是立即回收。

  小结:

  javascript变量可以用来保存两种类型的值:基本类型值和引用类型值。基本类型的值源自一下5种基本数据类型:Undefined、Null、Boolean、String、Number。引用类型如Object的各种实例。

  1. 基本类型在内存中占固定大小空间,因此会保存在栈内存中;
  2. 从一个变量向另一个变量复制基本类型的值时,会创建这个值副本。
  3. 引用类型的值是对象,保存在堆内存中,引用类型的值是指向对象的指针。
  4. 从一个变量向另一个变量复制引用类型的值,复制的是指针,因而两个变量都指向同一个对象
  5. 确定一个值是哪个基本类型可以使用,typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。

  javascript具有自动垃圾收集机制的编程语言,开发人员不必关系内存的分配和回收问题。

  1. 离开作用域的值将被自动标记为可以回收,因此将在垃圾收集期间被删除。
  2. “标记清除”是目前主要的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,以后在回收。
  3. 另一种是“引用计数”,跟踪所以值被引用的次数,可能会导致循环引用的问题。
  4. 解除变量的引用有助于消除循环引用的问题,而且对垃圾收集也有好处,为确保有效的回收内存,应该及时消除不再使用的全局对象、全局对象属性和循环引用变量的引用。

Javascript高级程序设计——垃圾收集的更多相关文章

  1. 《JavaScript高级程序设计》学习笔记(3)——变量、作用域和内存问题

    欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 本节内容对应<JavaScript高级程序设计>的第四章内容. 1.函数:通过函数可以封装 ...

  2. 读书时间《JavaScript高级程序设计》一:基础篇

    第一次看了<JavaScript高级程序设计>第二版,那时见到手上的书,第一感觉真是好厚的一本书啊.现在再次回顾一下,看的是<JavaScript高级程序设计>第三版,并记录一 ...

  3. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  4. JavaScript高级程序设计学习(三)之变量、作用域和内存问题

    这次讲的主要是变量,作用域和内存问题. 任何一门编程语言,都涉及这三个. 变量,比如全局变量,局部变量等,作用域,也分全局作用域和方法作用域,内存问题,在java中就涉及到一个垃圾回收的问题,由于ja ...

  5. 《Javascript高级程序设计》阅读记录(七):第七章

    <Javascript高级程序设计>中,2-7章中已经涵盖了大部分精华内容,所以摘录到博客中,方便随时回忆.本系列基本完成,之后的章节,可能看情况进行摘录. 这个系列以往文字地址: < ...

  6. 《Javascript高级程序设计》阅读记录(二):第四章

    这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...

  7. JavaScript高级程序设计第三版.CHM【带实例】

    从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...

  8. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  9. 《JavaScript高级程序设计(第3版)》笔记-序

    很少看书,不喜欢看书,主要是上学时总坐不住,没有多大定性,一本书可以两天看完,随便翻翻,也可以丢在角落里几个月不去动一下. 上次碰到了<JavaScript高级程序设计(第3版)>感觉真的 ...

随机推荐

  1. Android配置文件,所有权限

    访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permiss ...

  2. zoj 3946 Highway Project(最短路 + 优先队列)

    Highway Project Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward, the emperor of the Marjar ...

  3. Diode -- Pay Attention to Parallel Connection

    The above circuit is right. The two same resistors are integral. Because every diode is different, t ...

  4. 深入理解css中的margin属性

    深入理解css中的margin属性 之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些“坑”的,下面我会介绍margin的基本知识以及 ...

  5. Yocto开发笔记之《Tip-bitbake常用命令》(QQ交流群:519230208)

    开了一个交流群,欢迎爱好者和开发者一起交流,转载请注明出处. QQ群:519230208,为避免广告骚扰,申请时请注明 “开发者” 字样 =============================== ...

  6. Centos 6.0将光盘作为yum源的设置方法

    在使用Centos 的时候,用yum来安装软件包是再方便不过了,但是如果在无法连接互联网的情况下,yum就不好用了. 下面介绍一种方式,就是将Centos安装光盘作为yum源,然后使用yum来安装软件 ...

  7. css教程

    网址:http://www.aa25.cn/layout/index.shtml

  8. Mini ORM——PetaPoco笔记(转)

    记录一下petapoco官网博客的一些要点.这些博客记录了PetaPoco是如何一步步改进的. 目录: Announcing PetaPoco PetaPoco-Improvements PetaPo ...

  9. TCP的三次握手与四次分手

    TCP的位置 TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Link层: 在第二层上的数据,我们把它叫Frame,在 ...

  10. valuestack,stackContext,ActionContext.之间的关系以及如何存取数值的

      2013-03-15 10:54 1722人阅读 评论(1) 收藏 举报  分类: J2EE 版权声明:本文为博主原创文章,未经博主允许不得转载. 三者之间的关系如下图所示: ActionCont ...