资讯专栏INFORMATION COLUMN

Javascript内存的注意要点

liaosilzu2007 / 1681人阅读

摘要:垃圾收集具有自动垃圾收集机制。管理内存优化内存的最佳方式,就是为执行中的代码只保存必要的数据。一般适用于大多数的全局变量和全局对象的属性。如执行完毕后,变量被销毁手动解除的引用解除一个值的引用并不意味着自动回收该值所占的内存。

垃圾收集

JavaScript 具有自动垃圾收集机制。

标记清除

JavaScript 中最常用的垃圾收集方式是标记清除。

当变量进入环境(如在函数中声明一个变量)时,就将这个变量标记为“进入环境”;

当变量离开环境时,则将其标记为“离开环境”。

《js 高级程序设计》一书中指出:

到2008年为止,IE、Firefox、Opera、Chrome 和Safari 的JavaScript 实现使用的都是标记清除式的垃圾收集策略(或类似的策略),只不过垃圾收集的时间间隔互有不同。

引用计数

引用计数的含义就是跟踪记录每一个值被引用的次数。

循环引用是使用引用计数模式的最大问题。如:

function a(){
    var ObjectA = new Object();
    var ObjectB = new Object();
    
    ObjectA.aaa = ObjectB;
    ObjectB.bbb = ObjectA;    
}

另外一个例子是:

var element = document.getElementById("some_element");
var myObject = new Object();
myObject.element = element;
element.someObject = myObject;

为了避免循环引用导致的内存问题。应该在不使用的时候手动断开他们的链接。如:

myObject.element = null;
element.someObject = null;

当垃圾收集器下次运行时,就会回收他们占用的内存。

性能问题

虽然不建议代码调用垃圾收集过程,但还是稍微提一下:

在IE 中,调用window.CollectGarbage()方法会立即执行垃圾收集。
在Opera 7中,调用 window.opera.collect()方法也会启动垃圾收集。

管理内存

优化内存的最佳方式,就是为执行中的代码只保存必要的数据。一旦数据不再有用,就将其的值设置为null。这个方法就叫做接触引用。一般适用于大多数的全局变量和全局对象的属性。如:

function create(name){
    var person = new Object();
    person.name = name;
    return person;
}
var people = create("Oliver");
//create() 执行完毕后,person 变量被销毁
document.write(people.name);
people = null;
//手动解除people 的引用

解除一个值的引用并不意味着自动回收该值所占的内存。而是以便垃圾收集器下次运行时将其收回。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86160.html

相关文章

  • JavaScript 事件——“内存和性能”注意要点

    摘要:事件委托对事件处理程序过多的问题的解决方案就是事件委托。最适合采用事件委托技术的事件包括和。移除事件处理程序通常造成空事件处理程序的原因有可能是操作等或使用等。以防止部分浏览器出现内存问题。 事件委托 对事件处理程序过多的问题的解决方案就是事件委托。例如,click事件会一直冒泡到document层次。也就是说,我们可以为整个页面指定一个onclick事件处理程序,而不必给每个可单击的...

    YPHP 评论0 收藏0
  • Javascript变量注意要点

    摘要:如很明显可以看到,实际上是函数的局部变量。简单的说就是,复制给参数,在函数内部是局部变量,无论怎么变化,都不影响的变化。 ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。 基本类型和引用类型的值 基本类型值(String,Number,Boolean,Null,Undefined)指的是简单的数据段;引用类型值(保存在内存中的对象)指的是那些可能由多个值...

    booster 评论0 收藏0
  • JavaScript函数表达式——“函数递归和闭包”注意要点

    摘要:如调用函数声明函数不会报错使用函数表达式则不可以报错创建函数的两种方式,一个是函数声明如第一种方式一个是函数表达式如第二种方式。第二种函数创建方式创建的函数叫匿名函数或拉姆达函数,因为关键字后面没有标识符。 函数表达式的基本概念 name属性和函数提升 首先,name属性,通过这个属性可以访问到给函数指定的名字。(非标准的属性)如: function People(){}; cons...

    winterdawn 评论0 收藏0
  • 深入理解javascript原型和闭包

    摘要:深入理解原型和闭包王福朋博客园深入理解原型和闭包一切都是对象原文链接本文要点一切引用类型都是对象,对象是属性的集合。每个对象都有一个,可称为隐式原型。另外注意,构造函数的函数名第一个字母大写规则约定。 深入理解javascript原型和闭包 王福朋 - 博客园 —— 《 深入理解javascript原型和闭包》 1. 一切都是对象 原文链接:http://www.cnblogs.com...

    jemygraw 评论0 收藏0
  • React要点入门学习总结

    摘要:上面代码中,通过为组件指定事件的回调函数,确保了只有等到真实发生事件之后,才会读取属性。七表单代码九要点文本输入框的值,不能用读取,而要定义一个事件的回调函数,通过读取用户输入的值。 一.JSX简介 JSX即JavaScript XML,一种在React组件内部构建标签的类XML语法。在不使用JSX的情况下,React程序中创建DOM是这样的: //v0.11 React.DOM.h1...

    Towers 评论0 收藏0

发表评论

0条评论

liaosilzu2007

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<