"WeakReference会导致大量GC"这话是什么意思?

最近看腾讯的一本书《Android移动性能实战》里面有这样一段话不是很理解,请大家帮我分析一下

两害相权取其轻,官方建议使用LRU算法来做图片缓存,而不是之前推荐的
WeakReference,因为WeakReference会导致大量GC。原理示意图如图2-7所示。

我的疑惑有
1.弱引用根本不会影响GC,他为什么说WeakReference会导致大量GC,这个实在理解不了。
2.既然官方曾经推荐过使用弱引用,而且据我所知,Glide也使用了弱引用做缓存。那么请问弱引用和LRU分别的优势是什么。

先谢谢各位

阅读 3.8k
3 个回答

实现LRU也不是完全没问题吧,置换的方式,就要确定缓存多大空间,大了占用内存,小了置换频率太多效率不行。所以得取个平衡也就是所谓的算法,取多少合适。
而WeakReference单纯是为了解决引用避免内存泄漏的,你一旦不用了就清除好像没什么问题,但是换言之效率就会很差,而LRU就是定出一定的内存来存放图片的缓存,而WeakReference压根就没起到缓存的作用,只是避免使用者没有清除引用而导致内存泄漏。

缓存Bitmap的大部分场景是:虽然现在这个bitmap对象没有地方用到了,但是可能待会还会使用。这种情况下使用WeakReference就会导致这个bitmap在下次使用的时候已经被GC了,而Bitmap是大内存对象,不适合频繁分配回收内存。

WeakReference? WeekReference?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题