垃圾回收机制

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. 防止内存泄露

内存泄露多数是由于引用不合理导致的例如:意外声明全局变量,定时器回调通过闭包引用了外部变量,闭包

 

posted @ 2022-12-05 14:13  小五郎Peng  阅读(41)  评论(0)    收藏  举报