网站结构图怎么做,网站开发交付验收文档,上海公司注册代理的发展,微网站上的一键导航怎么做内存管理
C 语言这样的底层语言一般都有底层的内存管理接口#xff0c;比如 malloc()和free()。而 JavaScript 是在创建变量#xff08;对象#xff0c;字符串等#xff09;时自动进行了分配内存#xff0c;并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。
整…内存管理
C 语言这样的底层语言一般都有底层的内存管理接口比如 malloc()和free()。而 JavaScript 是在创建变量对象字符串等时自动进行了分配内存并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。
整个过程为分配内存 - 使用内存 - 清理内存。
JavaScript 在定义变量或者函数调用时就完成了内存分配
var n 123; // 给数值变量分配内存var o {a: 1,b: null,
}; // 给对象及其包含的值分配内存// 给数组及其包含的值分配内存就像对象一样
var a [1, null, abra];function f(a) {return a 2;
} // 给函数可调用的对象分配内存// 函数表达式也能分配一个对象
someElement.addEventListener(click,function () {someElement.style.backgroundColor blue;},false,
);var d new Date(); // 分配一个 Date 对象var e document.createElement(div); // 分配一个 DOM 元素垃圾回收机制
1. 引用计数
var o {a: {b: 2,},
};
// 两个对象被创建一个作为另一个的属性被引用另一个被分配给变量 o
// 很显然没有一个可以被垃圾收集var o2 o; // o2 变量是第二个对“这个对象”的引用o 1; // 现在“这个对象”只有一个 o2 变量的引用了“这个对象”的原始引用 o 已经没有var oa o2.a; // 引用“这个对象”的 a 属性
// 现在“这个对象”有两个引用了一个是 o2一个是 oao2 yo; // 虽然最初的对象现在已经是零引用了可以被垃圾回收了
// 但是它的属性 a 的对象还在被 oa 引用所以还不能回收oa null; // a 属性的那个对象现在也是零引用了
// 它可以被垃圾回收了存在的问题循环引用
引用计数算法考虑到它们互相都有至少一次引用所以它们不会被回收。
function f() {var o {};var o2 {};o.a o2; // o 引用 o2o2.a o; // o2 引用 oreturn azerty;
}f();2. 标记清除
过程分为标记 - 清除。
首先遍历根root上的所有对象给他们打上标记。然后在代码执行结束后对从根开始使用过引用过的变量取消标记清除掉具有标记的内存对象释放内存。