关于javascript:垃圾回收内存管理

58次阅读

共计 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 对象循环援用

正文完
 0