四大引用的学习索引

关于 SoftReference 在缓存中的使用问题,Android 在官方文档 SoftReference,明确指出

Soft refeence are most often used to implement memory-sensitive caches

SoftReference 引用对象非常适合实现内存敏感的缓存

软引用对象也比较好理解,它是一个比较特殊的存在,拥有强引用的属性,又更加安全。如果有一个对象具有软引用。在内存空间足够的情况下,除非内存空间接近临界值、jvm即将抛出oom的时候,垃圾回收器才会将该引用对象进行回收,避免了系统内存溢出的情况。(前提也是对象指向不为空)因此,SoftReference 引用对象非常适合实现内存敏感的缓存,例如加载图片的时候,bitmap缓存机制。

但是在后续的官方文档又变了:

"In practice, soft references are inefficient for caching. The runtime doesn't have enough information on which references to clear and which to keep. Most fatally, it doesn't know what to do when given the choice between clearing a soft reference and growing the heap."

在实践中,软引用(soft references)在缓存中是低效的,因为runtime并没有足够的信息来判别应该清除或者保留哪个 SoftReference(持有的对象),更无法判定当 App 要求更多内存的时候,是应该清除 SoftReference,还是增大 App 的Heap。

原因
"The lack of information on the value to your application of each reference limits the usefulness of soft references. References that are cleared too early cause unnecessary work; those that are cleared too late waste memory."

关于每个引用对应用程序的价值的信息的缺乏限制了软引用的有用性。过早清除的引用会导致不必要的工作;那些清除得太晚的会浪费内存--机翻

四大引用的源码分析
https://www.jianshu.com/p/e742e80ae523

实例
https://mp.weixin.qq.com/s/h5MzWRsfRTrrH4z3QIrSzQ

扩展:softReference+LruCache优化Android缓存
https://www.jianshu.com/p/7eaa037e03c7

你可能感兴趣的:(四大引用的学习索引)