如何避免JavaScript中的内存泄漏?( 三 )


user_1 = null; // removing the inactive user
// Garbage Collector
console.log(mapCache); // ((…) => "Peter has an id of 12345", (…) => "Mark has an id of 54321") // first entry is still in cache
为了解决这个问题,需要清除不需要的缓存:
一种有效的解决内存泄漏问题的方法是使用 WeakMap 。它是一种数据结构,其中键引用被保持为弱引用,并且仅接受对象作为键 。如果使用对象作为键,并且它是唯一引用该对象的引用,相关条目将从缓存中移除,并进行垃圾回收 。在下面的示例中,当替换 user_1 后,与之关联的条目将在下一次垃圾回收时自动从 WeakMap 中移除 。
letuser_1 = { name: "Peter", id: 12345};
letuser_2 = { name: "Mark", id: 54321};
constweakMapCache = newWeakMap;
functioncache(obj){
// ...same as above, but with weakMapCache
return[weakMapCache.get(obj), 'cached'];
}
cache(user_1); // ['Peter has an id of 12345', 'computed']
cache(user_2); // ['Mark has an id of 54321', 'computed']
console.log(weakMapCache); // ((…) => "Peter has an id of 12345", (…) => "Mark has an id of 54321"}
user_1 = null; // removing the inactive user
// Garbage Collector
console.log(weakMapCache); // ((…) => "Mark has an id of 54321") - first entry gets garbage collected
结论
对于复杂的应用程序,检测和修复 Java 内存泄漏问题可能是一项非常艰巨的任务 。了解内存泄漏的常见原因以防止它们发生是非常重要的 。在涉及内存和性能方面,最重要的是用户体验 , 这才是最重要的 。

【如何避免JavaScript中的内存泄漏?】


推荐阅读