共计 858 个字符,预计需要花费 3 分钟才能阅读完成。
垃圾回收
JavaScript 是应用垃圾回收的语言,浏览器的 Javascript 具备主动垃圾回收机制 (GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中应用的内存。其原理是: 垃圾收集器会定期(周期性)找出那些不在持续应用的变量,而后开释其内存。这个过程不是实时的,因为其开销比拟大并且 GC 时进行响应其余操作,所以垃圾回收器会依照固定的工夫距离周期性的执行,这不是一个完满的计划,因为某代码块是否还有用属于“不可判定”问题。
function fn1() {var obj = {name: 'hanzichi', age: 10};
}
function fn2() {var obj = {name:'hanzichi', age: 10};
return obj;
}
var a = fn1();
var b = fn2();
有两种标记清理,标记清理,援用计数(不罕用)
标记清理
它是 JavaScript 罕用垃圾回收策略,当变量进入上下文,变量会被加上存在于此上下文的标记(标记办法有很多)。当来到上下文时,加上来到上下文标记。随后垃圾回收程序做一次内存清理,销毁标记,回收内存。
援用计数
援用计数不罕用,它的思路是对每个值记录它被援用的次数。一个值,如果被申明变量并给它赋一个援用值,这个援用数是 1,如果这个值被赋给另一个变量,援用数加一。如果改值援用的变量被笼罩,援用数减一。援用数为 0 就能够回收。
function reference(){let a = {}// a 指向对象的援用数加一,为 1
let b = a// 援用数加一,为 2
let c = a// 援用数加一,为 3
let b = 6{}援用数减一,为 4}
援用计数有一个问题:循环援用·
function probromle(){let obj1 = new Object();
let obj2 = new Object();
let obj1.x = obj2
let obj2.y = obj1
在这里,obj1 和 obj2 相互援用,援用计数都是 2,如此,即使函数退出,援用计数仍然不会是 0 导致无奈回收。
还有一些问题,比方:com 对象循环援用
正文完
发表至: javascript
2021-03-19