Javascript内存管理_第1页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、javascript内存管理什么是内存内存(memory)也被称为内存储器和主存储器,其作用是用于临时存放cpu中的运算数据,以及与硬盘等外部存储器交换的数据。计算机中全部程序的运行都是在内存中举行的,因此内存的性能对计算机的影响十分大。内存生命周期无论什么语言,内存周期基本是全都的:分配你所需要的内存用法分配到的内存(读、写)不需要时将其释放归还javascript的内存分配值的初始化varn=123;/给数值变量分配内存vars="azerty"/给字符串分配内存varo=a:1,b:null;/给对象及其包含的值分配内存/给数组及其包含的值分配内存(就

2、像对象一样)vara=1,null,"abra"functionf(a)returna+2;/给函数(可调用的对象)分配内存/函数表达式也能分配一个对象someelement.addeventlistener(&39;click&39;,function()someelement.style.backgroundcolor=&39;blue&39;,false);通过函数调用分配内存vard=newdate();/分配一个date对象vare=document.createelement(&39;div&39;

3、);/分配一个dom元素内存用法用法值的过程事实上是对分配内存举行读取与写入的操作。读取与写入可能是写入一个变量或者一个对象的属性值,甚至传递函数的参数。内存释放大多数内存管理的问题都在这个阶段。在这里最艰巨的任务是找到所分配的内存的确已经不再需要了。它往往要求开发人员来确定在程序中哪一块内存不再需要并且释放它。垃圾回收引用计数这是最容易的垃圾收集器算法。假如没有引用指向这个对象的时候,这个对象就被认为是可以作为垃圾收集。varo=a:b:2;/两个对象被创建,一个作为另一个的属性被引用,另一个被分配给变量o/很明显,没有一个可以被垃圾收集varo2=o;/o2变量是其次个对这个对象的引用o=

4、1;/现在,这个对象的原始引用o被o2替换了varoa=o2.a;/引用这个对象的a属性/现在,这个对象有两个引用了,一个是o2,一个是oao2="yo"/最初的对象现在已经是零引用了/他可以被垃圾回收了/然而它的属性a的对象还在被oa引用,所以还不能回收oa=null;/a属性的那个对象现在也是零引用了/它可以被垃圾回收了循环引用的问题当碰到循环的时候就会有一个限制。在下面的实例之中,创建两个对象,并且相互引用,因此就会产生一个循环。当函数调用结束之后它们会走出作用域之外,因此它们就没什么用并且可以被释放。但是,基于引用计数的算法认为这两个对象都会被起码引

5、用一次,所以它俩都不会被垃圾收集器收集。functionf()varo=;varo2=;o.a=o2;/o引用o2o2.a=o;/o2引用oreturn"azerty"f();标志清除javascript中最常用的垃圾收集方式是标志清除(mark-and-sweep)。当变量进入环境(例如,在函数中声明一个变量)时,就将这个变量标志为进入环境。从规律上讲,永久不能释放进入环境的变量所占用的内存,由于只要执行流进入相应的环境,就可能会用到它们。而当变量离开环境时,则将其标志为离开环境。这个算法由以下步骤组成:这个垃圾收集器构建一个roots列表。root是全局

6、变量,被代码中的引用所保存。在javascript中,window就是这样的作为root的全局变量的例子。全部的root都会被监测并且被标记成活跃的(比如不是垃圾)。全部的子代也会递归地被监测。全部能够由root拜访的一切都不会被认为是垃圾。全部不再被标记成活跃的内存块都被认为是垃圾。这个收集器现在就可以释放这些内存并将它们返还给操作系统。内存泄漏内存泄漏可以被定义为应用程序不再需要的内存,但是因为某些缘由不会返回到操作系统或可用内存池。频繁的javascript泄露1.全局变量一个未声明变量的引用会在全局对象内部产生一个新的变量。在扫瞄器的状况,这个全局变量就会是window。functio

7、nfoo(arg)bar="sometext"等同于:functionfoo(arg)window.bar="sometext"假如bar被期望仅仅在foo函数作用域内保持对变量的引用,并且你遗忘用法var去声明它,一个意想不到的全局变量就产生了。2.被忘记的计时器和回调setinterval在javascript中是常常被用法的。大多数提供观看者和其他模式的回调函数库都会在调用自己的实例变得无法拜访之后对其任何引用也设置为不行拜访。但是在setinterval的状况下,这样的代码很常见:varserverdata=loa

8、ddata();setinterval(function()varrenderer=document.getelementbyid(&39;renderer&39;);if(renderer)renderer.innerhtml=json.stringify(serverdata);,5000);/每5000ms执行一次renderer所代表的对象在将来可能被移除,让部分interval处理器中代码变得不再被需要。然而,这个处理器不能够被收集由于interval依旧活跃的(这个interval需要被停止从而表面这种状况)。假如这个interval处理器不能够被收集,那么它的依靠也不能够被收集。这意味这存储大量数据的severdata也不能够被收集。3.闭包闭包的特性是内部函数能够拜访外部函数的作用域。varsayname=function()varname=&39;jozo&39;returnfunctio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论