加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

关于的JavaScript垃圾接纳机制

发布时间:2018-10-02 22:51:35 所属栏目:创业 来源:站长网
导读:Java Script具有自动垃圾接纳机制,执行情形会认真打点代码执行进程中行使的内存。 垃圾网络器必需跟踪哪个变量有效,对付不再有效的变量打上标志,以备未来收回其占用的内存。用于标识无用变量的计策因实现而异,但详细到赏识器中的实现,凡是有两个计策

JavaScript具有自动垃圾接纳机制,执行情形会认真打点代码执行进程中行使的内存。

垃圾网络器必需跟踪哪个变量有效,对付不再有效的变量打上标志,以备未来收回其占用的内存。用于标识无用变量的计策因实现而异,但详细到赏识器中的实现,凡是有两个计策。

1、标志破除

JavaScript中最常用的垃圾网络方法是标志破除(mark-and-sweep)。当变量进入情形时,就将这个变量标志为“进入情形”。从逻辑上讲,永久不能开释进入情形的变量所占用的内存,由于只要执行流进入响应的情形,就也许会用到它们。而当变量分开情形时,则将其标志为“分开情形”。

垃圾网络器在运行的时辰会给存储在内存中的全部变量都加上标志(虽然,可以行使任何标志方法)。然后,它会去掉情形中的变量以及被情形中的变量引用的变量的标志。而在此之后再被加上标志的变量将被视为筹备删除的变量,缘故起因是情形中的变量已经无法会见到这些变量了。最后,垃圾网络器完成内存破除事变,烧毁那些带标志的值并接纳他们所占用的内存空间。

2、引用计数
另一种不太常用的垃圾网络计策叫做引用计数(reference counting)。引用计数的寄义是跟踪记录每个值被引用的次数。当声明白一个变量并将一个引用范例值赋给该变量时,则这个值的引用次数就是1.假犹如一个值又被赋给另一个变量,则该值的引用次数加1。,相反,假如包括对这个引用的变量取得了其它一个值,则这个值的引用次数减1.当这个值的引用次数酿成0时,则声名没有步伐再见见这个值了,因而就可以将其占用的内存空间收返来。这样当垃圾接纳器下次再运行时,它就会开释那些引用次数为零的值所占用的内存。

轮回引用:工具A中包括一个指向工具B的指针,而工具B中也包括一个指向工具A的引用。如下:

function problem() {
var objectA = new Object();
var objectB = new Object();

objectA.someOtherObject = objectB;
objectB.anotherObject = objectA;
}

 在这个例子中,objectA 和 objectB 通过各自的属性彼此引用。也就是说,这两个工具的引用次数都是2.在回收标志破除计策的实现中,因为函数执行后,这两个工具都分开了浸染域,因此这种彼此引用不是个题目。但在回收引用计数计策的实现中,当函数执行完毕后,objectA 和 objectB 还将继承存在,因此它们的引用次数永久不会是 0。若是这个函数被一再多次引用,将会导致大量内存得不到接纳。

其它,IE中有一部门工具并不是原生 JavaScript 工具。譬喻,其BOM和DOM中的工具就是行使C++以COM(Component Object Model,组件工具模子)工具的情势实现的。而COM工具的垃圾网络机制回收的引用计数计策。因此纵然IE的JavaScript引擎是行使标志破除计策来实现的,但JavaScript会见的COM工具依然是基于引用计数计策的。

也就是说,只要在IE中涉及COM工具,就会存在轮回引用的题目。如下

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

 这个例子中,一个DOM元素与一个原生JavaScript工具之间建设了轮回引用。个中,变量myObject有一个名为element的属性指向element工具;反之亦然。因为存在这个轮回引用,纵然将例子中的DOM从页面中移除,它也永久不会被接纳。

为了停止相同这样的轮回引用题目,最好是在不行使它们的时辰手动断开原生 JavaScript工具与DOM元素之间的毗连。

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

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读