JavaScript内存管理

内存管理中的内存,指的是系统分配给浏览器的内存。出于安全的考虑,系统分配给web浏览器的内存通常都要比其它桌面程序要少。这也影响了给变量分配内存,同时还会影响调用栈以及在一个线程中能够同时执行的语句数量。

因此,确保占用最少的内存,可以让页面获得更好的性能。优化内存最好的方式,就是通过给不再使用的全局变量赋值为null,这样可以释放变量的引用 --------这个方法叫做解除引用。这种做法适用于全局变量以及全局变量的属性;下面来看一个例子:

function test (name) {
    var localPerson = new Object();
    localPerson.name = name;
    return localPerson;
}

var globalPerson = test("feifei");
console.log(globalPerson);

// 手动解除globalPerson的引用
globalPerson = null;

这个例子中,全局对象globalPerson获得了由函数test返回的的localPerson对象,然后在经过手动解除引用之后,全局变量globalPerson只是脱离了执行环境,需要到垃圾收集器下次运行的时候才会将其回收。  在函数执行过程中,也创建了一个局部变量localPerson,但由于这是局部变量,所以在函数执行完之后就会自动销毁,等待垃圾收集器回收。有关js变量的生命周期可点此了解。

垃圾收集器:

JavaScript是具备垃圾自动回收机制的语言,其原理是每隔一段时间会执行一次垃圾回收;其回收机制的原理就是:找出那些不再使用的变量,然后释放其所占用的内存。至于是如果找到那些不再使用的变量,目前所有的主流浏览器都是使用标记清除的方式。

标记策略:

垃圾收集器在运行的时候,会给存储在内存中的所有变量都加上标记,然后去掉正在环境中的变量,以及被环境中的变量所引用的变量的标记。此时剩下的被标记了的变量将被视为准备删除的变量,原因是环境中的变量已经无法访问到这些变量了,垃圾回收器完成清除工作之后,变量被正式销毁并回收所对应被占用的内存。

还有一种策略叫做引用计数,不过该策略现在已经被舍弃了,只有在老版本的IE上才会使用。IE9 包括以上版本都不再使用引用计数的策略。


在IE和Opera浏览器中,我们可以手动调用垃圾回收器立即执行,但我们如果正确编写了代码,也无需这样操作,也不建议大家这样子做。

立即执行垃圾收集方法:

IE:window.CollectGarbage();

Opera:window.opera.collect();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值