弱Map的弱引用原理,究竟是如何巧妙地实现对象生命周期管理的?

2026-03-31 15:461阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计858个文字,预计阅读时间需要4分钟。

弱Map的弱引用原理,究竟是如何巧妙地实现对象生命周期管理的?

目录+前言+弱引用应用+vs+强引用应用+Map+vs+WeakMap+前言+聊一聊WeakMap+弱引用应用,WeakMap+强引用应用

前言:在JavaScript中,理解弱引用和强引用的区别对于内存管理至关重要。本文将探讨WeakMap和普通Map的区别,并分析WeakMap在实际应用中的优势。

弱引用应用:弱引用允许对象在垃圾回收时被回收,而强引用则阻止对象被回收。WeakMap是一种特殊的Map,其键只能是弱引用,这意味着当键不再被其他地方引用时,它可以被垃圾回收。

Map vs WeakMap:- Map:普通Map使用强引用存储键值对,当键存在时,值不会被垃圾回收。- WeakMap:WeakMap使用弱引用存储键值对,当键不再被引用时,其对应的值可以被垃圾回收。

聊一聊WeakMap:WeakMap常用于存储那些不应该阻止垃圾回收的对象,例如缓存数据。以下是一个简单的WeakMap使用示例:

javascriptconst cache=new WeakMap();

function getCache(key) { if (cache.has(key)) { return cache.get(key); } else { const value=computeExpensiveValue(key); cache.set(key, value); return value; }}

弱Map的弱引用原理,究竟是如何巧妙地实现对象生命周期管理的?

弱引用应用,WeakMap+强引用应用:在实际应用中,WeakMap可以与强引用结合使用,以优化内存使用。以下是一个示例:

javascriptconst obj={ key: 'value' };const weakMap=new WeakMap();weakMap.set(obj, 'some value');

// 强引用const strongRef=weakMap.get(obj);console.log(strongRef); // 输出: 'some value'

// 弱引用weakMap.delete(obj);// 此时obj可以被垃圾回收,而weakMap不再引用obj

总结:WeakMap和普通Map在内存管理上有显著区别。WeakMap适用于需要动态存储对象且不希望阻止垃圾回收的场景。通过合理使用WeakMap,可以优化内存使用,提高应用性能。

目录
  • 前言
  • 弱引用 vs 强引用
  • Map vs WeakMap

前言

聊一下WeakMap弱引用,看了很多文章发现说的不对,给出的demo经过尝试也是错误的,哎,难搞也要搞

弱引用 vs 强引用

对象被强引用则不会被垃圾回收机制回收,这没啥说的。那到底啥事弱引用呢?

垃圾回收机制最常用的方法就是引用计数,只要有引用堆内存的地方,引用计数就要加1。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放

弱引用则可以理解为引用计数不会+1,看一下实际表现

Map vs WeakMap

var m = new WeakMap() function Foo() { this.arr = new Array(5 * 1024 * 1024) } var f = new Foo() m.set(f, 'data') f = null

网上有人说m.get('f')得到的是undefined所以是弱引用,但其实你使用Map得到的也是undefined,这种说法还非常的多,不能说他说的不对吧,简直就是胡说。

回归正传,看一下为啥说WeakMap是弱引用。打开F12,选择内存(memory),点击小圆点获取快照,然后搜索Foo,发现并没有表示其已经被回收

而后将WeakMap改为Map重新获取快照,发现Foo没有被回收

这个方式可以很直观的表明WeakMap的弱引用

以上就是weakMap为什么是弱引用原理的详细内容,更多关于weakMap为什么是弱引用的资料请关注自由互联其它相关文章!

本文共计858个文字,预计阅读时间需要4分钟。

弱Map的弱引用原理,究竟是如何巧妙地实现对象生命周期管理的?

目录+前言+弱引用应用+vs+强引用应用+Map+vs+WeakMap+前言+聊一聊WeakMap+弱引用应用,WeakMap+强引用应用

前言:在JavaScript中,理解弱引用和强引用的区别对于内存管理至关重要。本文将探讨WeakMap和普通Map的区别,并分析WeakMap在实际应用中的优势。

弱引用应用:弱引用允许对象在垃圾回收时被回收,而强引用则阻止对象被回收。WeakMap是一种特殊的Map,其键只能是弱引用,这意味着当键不再被其他地方引用时,它可以被垃圾回收。

Map vs WeakMap:- Map:普通Map使用强引用存储键值对,当键存在时,值不会被垃圾回收。- WeakMap:WeakMap使用弱引用存储键值对,当键不再被引用时,其对应的值可以被垃圾回收。

聊一聊WeakMap:WeakMap常用于存储那些不应该阻止垃圾回收的对象,例如缓存数据。以下是一个简单的WeakMap使用示例:

javascriptconst cache=new WeakMap();

function getCache(key) { if (cache.has(key)) { return cache.get(key); } else { const value=computeExpensiveValue(key); cache.set(key, value); return value; }}

弱Map的弱引用原理,究竟是如何巧妙地实现对象生命周期管理的?

弱引用应用,WeakMap+强引用应用:在实际应用中,WeakMap可以与强引用结合使用,以优化内存使用。以下是一个示例:

javascriptconst obj={ key: 'value' };const weakMap=new WeakMap();weakMap.set(obj, 'some value');

// 强引用const strongRef=weakMap.get(obj);console.log(strongRef); // 输出: 'some value'

// 弱引用weakMap.delete(obj);// 此时obj可以被垃圾回收,而weakMap不再引用obj

总结:WeakMap和普通Map在内存管理上有显著区别。WeakMap适用于需要动态存储对象且不希望阻止垃圾回收的场景。通过合理使用WeakMap,可以优化内存使用,提高应用性能。

目录
  • 前言
  • 弱引用 vs 强引用
  • Map vs WeakMap

前言

聊一下WeakMap弱引用,看了很多文章发现说的不对,给出的demo经过尝试也是错误的,哎,难搞也要搞

弱引用 vs 强引用

对象被强引用则不会被垃圾回收机制回收,这没啥说的。那到底啥事弱引用呢?

垃圾回收机制最常用的方法就是引用计数,只要有引用堆内存的地方,引用计数就要加1。如果一个值的引用次数是0,就表示这个值不再用到了,因此可以将这块内存释放

弱引用则可以理解为引用计数不会+1,看一下实际表现

Map vs WeakMap

var m = new WeakMap() function Foo() { this.arr = new Array(5 * 1024 * 1024) } var f = new Foo() m.set(f, 'data') f = null

网上有人说m.get('f')得到的是undefined所以是弱引用,但其实你使用Map得到的也是undefined,这种说法还非常的多,不能说他说的不对吧,简直就是胡说。

回归正传,看一下为啥说WeakMap是弱引用。打开F12,选择内存(memory),点击小圆点获取快照,然后搜索Foo,发现并没有表示其已经被回收

而后将WeakMap改为Map重新获取快照,发现Foo没有被回收

这个方式可以很直观的表明WeakMap的弱引用

以上就是weakMap为什么是弱引用原理的详细内容,更多关于weakMap为什么是弱引用的资料请关注自由互联其它相关文章!