,,JavaScript CollectGarbage函数案例详解

,,JavaScript CollectGarbage函数案例详解

本文主要介绍JavaScript CollectGarbage函数案例的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

首先看一个内存释放的例子:

脚本语言='JavaScript '

!-

strTest=' 1

for(var I=0;i 25我)

{

strTest=strTest

}

alert(strTest);

删除strTest

collect garbage();

//-

/脚本

IE特有的属性CollectGarbage,用来释放内存。使用方法应该是,将变量或引用对象设置为null或delete,然后做出释放动作。在进行垃圾收集之前,必须明确两个必要条件:

-当对象在它所在的上下文之外时,它是无效的。

-如果不使用(引用),全局对象将无效。

//-

JavaScript对象什么时候失效?

//-

函数testObject() {

var _ obj 1=new Object();

}

函数testObject2() {

var _ obj 2=new Object();

return _ obj2

}

//示例1

testObject();

//示例2

testObject2()

//示例3

var obj 3=testobject 2();

obj3=null

//示例4

var obj 4=testobject 2();

var arr=[obj 4];

obj3=null

arr=[];

在这四个例子中:

——“例1”在函数testObject()中构造_obj1,但当函数退出时,

它已经离开了函数的上下文,所以_obj1无效;

-在“示例2”中,还在testObject2()中构造了一个object _obj2并传递出去,因为

这个对象有一个“脱离功能”的上下文(和生命周期),但是,由于功能

的返回值没有被其他变量“持有”,所以_obj2立即失效;

-在“例3”中,testObject2()构造的_obj2由外部变量obj3持有,

此时,在“obj3=null”行生效之前,_obj2不会被引用。

消失,失败。

-出于与示例3相同的原因,示例4中的_obj2将位于“arr=[]”行中

那就作废了。

然而,对象的“无效”并不意味着它将被“释放”。在JavaScript运行时环境中,没有

有任何方法可以告诉用户对象将在何时被释放。这取决于JavaScript。

的内存回收机制。3354这种策略类似于。网。

在前面的EXCEL操作示例代码中,对象的所有者,也就是' Excel '的进程。' EXE '

它只能在ActiveX对象实例发布后发生。以及文件的锁定和操作

系统的权限凭据与进程相关。所以如果对象只是“无效”而不是“释放”,

那么其他进程在处理文件和引用操作系统的权限凭证时就会出现问题。

3354有人说这是JavaScript或者COM机制的BUG。其实就是OS和IE。

和JavaScript,而不是一个独立的问题。

微软已经公开了解决这个问题的策略:主动调用内存回收进程。

JScript(微软)中提供了CollectGarbage()过程(通常缩写为GC过程),

GC进程用于清理当前IE中的“无效对象案例”,即调用对象的析构进程。

在上面的例子中,调用GC过程的代码是:

//-

//处理ActiveX对象时,GC过程的标准调用方法

//-

函数writeXLS() {

//(省略.)

excel。quit();

excel=null

setTimeout(CollectGarbage,1);

}

第一行代码调用excel。Quit()方法使excel进程停止并退出。此时,由于JavaScript

环境中有excel对象的实例,因此excel进程实际上不会停止。

第二行代码使excel为null以清除对象引用,从而使对象“无效”。然而,因为

对象仍然在函数的上下文中,所以如果直接调用GC过程,对象仍然不会被清理。

第三行代码使用setTimeout()调用CollectGarbage函数,时间间隔仅设置为“1”

让GC进程在writeXLS()函数执行后发生。这样,excel对象就满足了“可以”的要求

GC清理的两个条件:没有引用和离开上下文。

在使用ActiveX对象的JS环境中,GC进程的使用非常有效。一些潜在的ActiveX

包括XML、VML、OWC(Office Web component)、flash,甚至JS中包含的VBArray。

从这个角度来看,ajax架构采用XMLHTTP,同时需要满足“无页面切换”的要求

特性,所以在适当的时候主动调用GC进程会获得更好的效率UI体验。

事实上,即使使用GC进程,前面提到的excel问题也不会完全解决。因为IE也

权限凭据被缓存。更新页面权限凭证的唯一方法是“切换到新页面”。

所以,其实在前面提到的SPS项目中,我采用的方法并不是GC,而是下面这个。

分段代码:

//-

//处理ActiveX对象时使用的页面切换代码

//-

函数writeXLS() {

//(省略.)

excel。quit();

excel=null

//下面的代码用来解决IE调用Excel中的一个bug,MSDN提供的方法:

//setTimeout(CollectGarbage,1);

//因为无法清除(或同步)网页的受信任状态,所以会导致SaveAs()等方法在

//下次调用时将无效。

location . reload();

}

手动删除运算符的描述

引用

从对象中删除属性或从数组中删除元素。

删除表达式

expression参数是有效的JScript表达式,通常是属性名或数组元素。

说明

如果表达式的结果是一个对象,并且表达式中指定的属性存在,并且对象不允许删除它,则返回false。

在所有其他情况下,返回true。

最后补充一个关于GC的说明:IE窗体最小化时,IE会主动调用一次CollectGarbage()函数。这使得IE窗口最小化后内存占用明显改善。

本文关于JavaScript CollectGarbage函数案例的详细讲解到此为止。有关js CollectGarbage函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: