- 及时释放引用
- 描述:当一个对象不再需要时,确保及时释放对它的引用,让垃圾回收机制能够回收其占用的内存。
- 示例:
class MyClass {
constructor() {
this.largeData = new Array(1000000).fill(0);
}
doSomething() {
// 执行一些操作
}
// 释放内存的方法
releaseMemory() {
this.largeData = null;
}
}
let myObj = new MyClass();
myObj.doSomething();
// 当不再需要myObj中的largeData数据时
myObj.releaseMemory();
// 后续如果不再使用myObj,也可释放对它的引用
myObj = null;
- 避免不必要的对象创建
- 描述:如果在一个循环或者频繁调用的函数中创建对象,会导致大量不必要的内存开销。尽量复用已有的对象,而不是每次都创建新对象。
- 示例:
class ReusableObject {
constructor() {
// 初始化一些属性
}
updateData(data) {
// 更新对象的数据,而不是创建新对象
this.data = data;
}
}
// 创建一个可复用的对象实例
let reusable = new ReusableObject();
for (let i = 0; i < 1000; i++) {
let data = { value: i };
// 复用reusable对象,而不是在每次循环都创建新对象
reusable.updateData(data);
// 对reusable进行操作
}
- 使用WeakMap和WeakSet
- 描述:WeakMap和WeakSet中的键/值是弱引用,当对象没有其他强引用时,垃圾回收机制可以回收它们。适用于当你需要存储一些关联数据,但又不想阻止这些数据被回收的场景。
- 示例:
const weakMap = new WeakMap();
class MyClass2 {
constructor() {
this.data = { importantInfo: 'Some data' };
weakMap.set(this, 'Additional information about this instance');
}
}
let obj1 = new MyClass2();
// 获取WeakMap中对应obj1的数据
console.log(weakMap.get(obj1));
// 释放对obj1的引用
obj1 = null;
// 此时,如果没有其他对obj1内部data的引用,垃圾回收机制可以回收相关内存