javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。
垃圾收集机制的原理:找出那些不再继续使用的变量,然后释放其占用的空间。为此,垃圾收集器会按照固定的时间间隔,周期性地执行这一操作。
1.标记清除
Javascript最常用的垃圾收集方式是标记清除。当变量进入环境时,就将这个变量标记为“进入环境”。而当变量离开环境时,则将其标记为“离开环境”。
2.引用计数
引用计数的含义是跟踪记录每个值被引用的次数。
当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。如果同一个值又被赋给另一个变量,则该值引用次数又加1 。相反,如果包含对这个值引用的变量又取得了另一个值,则这个值的引用次数减1。当这个值的引用次数变成0时,则说明没有办法再访问这个值了,因而就可以将其占用的 内存空间回收回来。
fucnction problem(){
var objectA = new Object();
var objectB = new Object();
objectA.someOtherObject = objectB;
objectB.someOtherObject = objectA;
}
objectA和objectB通过各自的属性相互引用,这 两个对象的引用次数都是2 。
var element = document.getElementById("some_element");
var myObject = new Object();
myObject.element = element;
element.someObject = myObject;
这个例子存在循环使用,它永远不会被回收。
可以如下处理:
myObject.element = null;
element.someObject = null;
将变量设置为Null切断他们之间的连接。
3.性能问题
垃圾收集是周期性运行的,确定垃圾收集的时间间隔是一个非常重要的问题。垃圾收集器根据内存分配量运行的,具体一点说就是256个变量,4096 个对象,或者64KB的字符串。达到上述任一个临界值,垃圾回收机制就会运行。
4管理内存
分配给浏览器可用内存数量通常要比桌面应用少。这样做的目的是出于安全方面的考虑,避免浏览器页面耗尽 全部系统内存而导致系统崩溃。
因此确保占用最少的内在可以让页面 获得更好的性能。而优化内存占用的最佳方式,就是为执行中的代码只保存必要的数据。一量数据不再有用,通过将其值设置为null来释放其引用--这个做法叫解除引用。这一做法适用于大多数全局变量和全局对象。局部变量会在离开执行环境时自动解除引用。
function createPerson(name){
var localPerson = new Object();
localPerson.name = nane;
return localPerson;
}
var globalPerson = createPerson("Jin");
globalPerson = null;
本文介绍了JavaScript中的垃圾收集机制,包括标记清除和引用计数两种主要方式,并探讨了循环引用问题及解决方法。
216

被折叠的 条评论
为什么被折叠?



