垃圾回收机制
JavaScript 是使用垃圾回收的语言,他会自动进行内存管理,每隔一段时间去判断变量是否不再使用 然后释放它占用的内存。
垃圾回收有两种标记策略- 标记清理与引用计数,其中标记清理是最流行的策略
标记清理 - 先标记内存中存储的所有变量,将在上下文中的变量或者被引用的变量的标记清除,之后垃圾回收会做一次内存清理将所有带标记的销毁,释放其内存
引用计数 - 在变量被引用或者被赋值时将计数+1,在被覆盖时-1,在回收时销毁所有值为0的变量。 但是如果是通过各自属性互相引用的情况下,他们的引用数永远不会变成0,得不到释放。
垃圾回收机制由于是浏览器周期性运行的,如果内存中分配了很多变量,则可能造成性能损失,尤其在移动端的浏览器设备内存更小。优化内存占用的最佳手段就是保证在执行时只存储必要的数据,不用的数据设置为null,释放其引用
优化手段:
1.用const let声明变量,限制作用域,让垃圾回收程序更早的介入
2.隐藏类和删除操作
隐藏类的意思是 由同一个构造函数创建出的类的实例会共享隐藏类,但是如果对其中一个进行添加属性的操作的话,二者不在共享隐藏类。例:
function Article() { this.title = 'xxx'; } let a1 = new Article(); let a2 = new Article(); //a1 a2 共享隐藏类 a2.author = 'Jake'; //不再共享
最好的方案是避免这种动态添加,在构造函数中一次性声明所有属性 例:
function Article(opt_author) { this.title = 'Inauguration Ceremony Features Kazoo Band'; this.author = opt_author; } let a1 = new Article(); let a2 = new Article('Jake');
3. 防止内存泄露
内存泄露多数是由于引用不合理导致的例如:意外声明全局变量,定时器回调通过闭包引用了外部变量,闭包

浙公网安备 33010602011771号