前端八股 7
垃圾回收机制
系统周期性地找出暂时不再使用的变量的机制,释放其内存的机制
方法:古老引用计数法
创建一张引用表记录各种资源被引用的次数,当引用次数为0就回收
问题:当有两个对象互相引用时会造成内存泄漏
比如:
function A(){
B()
}
function B(){
A()
这样函数A和函数B互相引用,A和B的引用数永远大于等于1,内存不会被释放,内存泄漏
标记清除法
当变量进入执行环境时,标记该变量为“进入环境”,当变量离开环境时,标记为“离开环境”
常见内存泄漏情况
1.函数中直接定义全局变量
function foo(arg) {bar = "this is a hidden global variable";
}
2.定时器函数
var someResource = getData();
setInterval(function() {
var node = document.getElementById(‘Node’);
if(node) {
// 处理 node 和 someResource
node.innerHTML = JSON.stringify(someResource));
}
}, 1000);
如果清除node指向的DOM元素,内部函数仍旧使用someResource变量造成内存泄漏