-
Notifications
You must be signed in to change notification settings - Fork 780
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-11-26:谈一谈Glide的缓存机制? #197
Comments
郭霖大佬曾经基于glide 3.X版本 写过 7 8篇关于glide的博客 现在虽然glide 4.X了 但是很多东西还是没变的 |
Glide的缓存机制,主要分为2种缓存,一种是内存缓存,一种是磁盘缓存。 具体来讲,缓存分为加载和存储: 当想要加载某张图片时,先去LruCache中寻找图片,如果LruCache中有,则直接取出来使用,并将该图片放入WeakReference中,如果LruCache中没有,则去WeakReference中寻找,如果WeakReference中有,则从WeakReference中取出图片使用,如果WeakReference中也没有图片,则从磁盘缓存/网络中加载图片。 ②将缓存图片的时候,写入顺序:弱引用缓存-》Lru算法缓存-》磁盘缓存中。 当图片不存在的时候,先从网络下载图片,然后将图片存入弱引用中,glide会采用一个acquired(int)变量用来记录图片被引用的次数, 当acquired变量大于0的时候,说明图片正在使用中,也就是将图片放到弱引用缓存当中;如果acquired变量等于0了,说明图片已经不再被使用了,那么此时会调用方法来释放资源,首先会将缓存图片从弱引用中移除,然后再将它put到LruResourceCache当中。这样也就实现了正在使用中的图片使用弱引用来进行缓存,不在使用中的图片使用LruCache来进行缓存的功能。 另:从Glide4.x开始,读取图片的顺序有所改变:弱引用缓存-》Lru算法缓存-》磁盘缓存 |
那我来说说glide4 的缓存机制吧 首先弱引用缓存代表的是当前正在使用的缓存, 请求图片之后 会分为两个步骤, 1.进入磁盘缓存,2进入弱引用缓存。 在弱引用缓存中使用一个计数器来维护当前资源的是否被使用,如果计数器=0说明当前资源已经不被使用了,则进入Lru缓存,Lru缓存是glide使用linkhashmap来维护的,如果lru满了则删除最长时间未使用的。 glide设计的三层缓存模型, 其中内存缓存 减轻了磁盘缓存的压力,避免io操作,而弱引用缓存则减轻了 lru缓存的压力,避免lru过满导致频繁gc,并且提高查找效率 另外再说下 glide4 五种缓存策略 data source all no automic |
配上代码来说,统一的key,依据key去找;代码在Engine中 总结:弱引用 -> Lrucache -> 网络防重复请求 -> 网络请求 |
1,为什么使用Glide |
1,为什么使用Glide |
No description provided.
The text was updated successfully, but these errors were encountered: