javascript 的内存管理
分配,使用,基本不需要我们管理
而回收比重要,一不小心就内存泄漏了。
垃圾回收算法主要依赖于引用的概念。
在内存管理的环境中,一个对象如果有访问另一个对象的权限(隐式或者显式),叫做一个对象引用另一个对象。
例如,一个Javascript对象具有对它原型的引用(隐式引用)和对它属性的引用(显式引用)。
- 引用计数垃圾收集(2012前)
对象有没有其他对象引用到它。 如果没有引用指向该对象(零引用),对象将被垃圾回收机制回收。
缺点:循环引用
var o = {};
var o2 = {};
o.a = o2; // o 引用 o2
o2.a = o; // o2 引用 o
- 标记-清除算法
这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”。
假定设置一个叫做根(root)的对象(在Javascript里,根是全局对象)。垃圾回收器将定期从根开始,找所有从根开始引用的对象,然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对象。
内存泄漏:
(闭包)
遇到就再补上