⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

WeakRef与FinalizationRegistry:手动内存管理的最后防线

在垃圾回收不可控的JS世界中,利用WeakRef和FinalizationRegistry实现缓存、监视和资源回收。 · 难度:入门 · +10XP

WeakRef与FinalizationRegistry:手动内存管理的最后防线

WeakRef允许你持有对象的弱引用而不阻止GC回收,FinalizationRegistry则让你在对象被回收时执行清理回调。本教程展示它们的实际应用:构建一个自动清理的LRU缓存(当内存紧张时自动丢弃条目)、监视DOM元素何时被移除并触发反注册事件,以及避免闭包泄漏。你将理解WeakRef的局限性(不保证每次都能获取到对象)、如何配合FinalizationRegistry安全地清理外部资源(如取消网络请求、关闭文件句柄)。注意:不要依赖FinalizationRegistry做关键资源管理,因为回调执行时机不确定。

// 弱引用缓存
class WeakCache {
  constructor() {
    this.cache = new Map(); // key -> WeakRef
    this.registry = new FinalizationRegistry((key) => {
      this.cache.delete(key);
    });
  }
  set(key, value) {
    const ref = new WeakRef(value);
    this.cache.set(key, ref);
    this.registry.register(value, key);
  }
  get(key) {
    const ref = this.cache.get(key);
    return ref ? ref.deref() : undefined;
  }
}
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 231 篇
0 完成
🔥 0