鍍金池/ 問答/Java  Android/ "WeakReference會(huì)導(dǎo)致大量GC"這話是什么意思?

"WeakReference會(huì)導(dǎo)致大量GC"這話是什么意思?

最近看騰訊的一本書《Android移動(dòng)性能實(shí)戰(zhàn)》里面有這樣一段話不是很理解,請大家?guī)臀曳治鲆幌?/p>

兩害相權(quán)取其輕,官方建議使用LRU算法來做圖片緩存,而不是之前推薦的
WeakReference,因?yàn)閃eakReference會(huì)導(dǎo)致大量GC。原理示意圖如圖2-7所示。

我的疑惑有
1.弱引用根本不會(huì)影響GC,他為什么說WeakReference會(huì)導(dǎo)致大量GC,這個(gè)實(shí)在理解不了。
2.既然官方曾經(jīng)推薦過使用弱引用,而且據(jù)我所知,Glide也使用了弱引用做緩存。那么請問弱引用和LRU分別的優(yōu)勢是什么。

先謝謝各位

回答
編輯回答
空白格

WeakReference? WeekReference?

2017年5月20日 06:28
編輯回答
念舊

實(shí)現(xiàn)LRU也不是完全沒問題吧,置換的方式,就要確定緩存多大空間,大了占用內(nèi)存,小了置換頻率太多效率不行。所以得取個(gè)平衡也就是所謂的算法,取多少合適。
而WeakReference單純是為了解決引用避免內(nèi)存泄漏的,你一旦不用了就清除好像沒什么問題,但是換言之效率就會(huì)很差,而LRU就是定出一定的內(nèi)存來存放圖片的緩存,而WeakReference壓根就沒起到緩存的作用,只是避免使用者沒有清除引用而導(dǎo)致內(nèi)存泄漏。

2018年4月17日 00:20
編輯回答
六扇門

緩存Bitmap的大部分場景是:雖然現(xiàn)在這個(gè)bitmap對象沒有地方用到了,但是可能待會(huì)還會(huì)使用。這種情況下使用WeakReference就會(huì)導(dǎo)致這個(gè)bitmap在下次使用的時(shí)候已經(jīng)被GC了,而Bitmap是大內(nèi)存對象,不適合頻繁分配回收內(nèi)存。

2017年6月11日 23:26