一、缓存层级与设计目标

  1. 双级缓存

    • 内存缓存:弱引用 + LruCache

    • 磁盘缓存:DiskLruCache

  2. 设计目标

    • 减少网络流量消耗

    • 避免Bitmap频繁创建/销毁引发的GC

    • 提升图片加载速度


二、内存缓存机制
1. 双缓存结构
缓存类型存储对象数据结构特点
弱引用正在使用的图片HashMap快速访问,GC敏感
LruCache暂时未用的图片LinkedHashMapLRU算法管理,容量可控
2. 关键实现原理
  • 引用计数器EngineResource):

    • acquired变量记录引用次数

    • acquire():引用+1(图片使用时调用)

    • release():引用-1(图片释放时调用)

  • 缓存转移规则

    if (resource.release()) {// 引用计数=0时:从弱引用移除 → 存入LruCachelruCache.put(key, resource);
    }
3. 存取流程
  • 读顺序:弱引用 → LruCache

  • 写顺序:磁盘 → 弱引用 → LruCache(释放时)

  • 设计优势

    • 分压策略:弱引用减少LruCache的trimToSize频率(trimToSize是LruCache(Least Recently Used Cache)中的核心方法,用于强制将缓存大小调整到指定容量范围内。当缓存数据总量超过预设的最大容量(maxSize)时,该方法会自动移除最近最少使用的条目,直到满足currentSize <= maxSize的条件。)

    • 效率优化:HashMap访问效率高于LinkedHashMap


三、磁盘缓存机制
1. 缓存策略(DiskCacheStrategy)
策略缓存内容适用场景
DATA原始图片数据网络图片
RESOURCE转换后的图片(缩放/裁剪)本地图片
ALLDATA + RESOURCE远程图片完整缓存
NONE不缓存敏感数据
AUTOMATIC(默认)智能选择(远程:DATA;本地:RESOURCE)平衡性能与空间
2. 磁盘读写流程
  • 读顺序

    1. ResourcesCacheGenerator:查找转换后的缓存

    2. SourceGenerator:查找原始缓存

    3. DataCacheGenerator:网络下载并缓存

  • 写顺序
    网络 → 磁盘(根据策略缓存DATA/RESOURCE) → 内存

3. 核心类协作


四、缓存流程图解


正确逻辑梳理

Glide缓存分为内存+磁盘两级:
1. 内存缓存

  • 采用弱引用+LruCache双结构

  • 正在使用的图片存在弱引用(快速访问),暂时不用的移入LruCache

  • 通过acquired引用计数器实现状态迁移

2. 磁盘缓存

  • 通过DiskLruCache实现

  • 支持5种策略

  • 读取顺序:转换后缓存 → 原始缓存 → 网络下载

3. 整体流程

  • 读顺序:弱引用 → LruCache → 磁盘 → 网络

  • 写顺序:网络 → 磁盘 → 弱引用 → LruCache(释放时)

4.设计亮点

  • 弱引用分压减少LruCache扩容压力

  • 引用计数器精准管理内存生命周期

  • 磁盘缓存策略灵活适配不同场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/86603.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86603.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86603.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件

文章目录 🌐 BaiduSitemap - Typecho站点地图生成与多搜索引擎推送插件✨ 功能特点🧩 插件架构核心模块文件结构📦 安装方法方法一:手动安装方法二:Git克隆⚙️ 配置说明站点地图基本设置搜索引擎配置百度搜索引擎必应(Bing)搜索引擎谷歌(Google)搜索引擎🚀 使用…

androidx中<layout>根布局的意义及用法

在 Android 开发中,<layout> 根布局是 Android Jetpack Data Binding 库的核心组件,用于声明该 XML 布局文件将使用数据绑定功能。以下是详细说明: 📌 一、基本作用 1. 启用数据绑定 <layout> 标签标志着此布局文件支持数据绑定,编译器会为其生成对应的绑定类…

QTreeWidget 简单使用

效果图&#xff1a; 关键代码&#xff1a; void MainProj::_InitTree() { connect(m_pTreeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(TreeItemClicked(QTreeWidgetItem*, int))); m_pTreeWidget->header()->setHidden(1); /*QTreeWid…

手势-handpose的pipeline介绍

手势-handpose的pipeline包括&#xff1a; 1、手部检测算法&#xff1a;单帧检测出左右手的边界框。 2、手部跟踪算法&#xff1a;连续帧跟踪&#xff0c;锁定左右手跟踪目标&#xff0c;作为后续的手部ui操作。 3、手部关键点检测算法&#xff1a;基于单帧的检测框图像作为输…

计算机操作系统(十七)内存管理

计算机操作系统&#xff08;十七&#xff09;内存管理 前言一、内存的使用与程序重定位&#xff08;一&#xff09;内存是什么&#xff1f;&#xff08;二&#xff09;程序的重定位过程&#xff08;三&#xff09;总结&#xff1a;内存使用的核心问题 二、连续分区管理&#xf…

【编译原理】期末

单选题 (4分) 令文法G[E]为&#xff1a;E->ET | T T->T*F | F F-> (E) | i 句型 F*iT 的最左素短语是&#xff08; &#xff09; A.F B.i C.T D.F*i B 短语&#xff1a; F*iT、F*i、F、i 素短语&#xff1a; i 最左素短语&#xff1a; i 单选题 (4分) 若在…

一个简单测试Deepseek吞吐量的脚本,国内环境可跑

一个简单测试Deepseek吞吐量的脚本,这里用DeepSeek-R1-Distill-Qwen-32B ,支持单卡4090 24G可跑,具体看你的硬件情况做调整,理论支持所有的模型,看你需要,可以修改模型名称,重点是pip使用国内的源,模型下载用阿里的ModelScope,无障碍下载,使用. 最后可以生成一个txt与html报表.…

前端基础知识JavaScript系列 - 19(正则表达式)

一、是什么 正则表达式是一种用来匹配字符串的强有力的武器 它的设计思想是用一种描述性的语言定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;我们就认为它“匹配”了&#xff0c;否则&#xff0c;该字符串就是不合法的 在 JavaScript中&#xff0c;正则表达式也…

Java锁机制知识点

一、锁的基础概念 1.1 什么是锁 在并发编程中&#xff0c;锁是用于控制多个线程对共享资源进行访问的机制。锁可以保证在同一时刻最多只有一个线程访问共享资源&#xff0c;从而保证数据的一致性。 1.2 锁的分类 可重入锁 vs 不可重入锁&#xff1a;可重入锁允许同一个线程…

2025下半年软考软件设计师(中级)怎么高效备考,目标是稳过线!

25下半年软考开始进入备考阶段&#xff0c;现在咱们就抛开那些文绉绉的官话&#xff0c;用大白话来聊聊2025下半年软考软件设计师&#xff08;中级&#xff09;怎么高效备考&#xff0c;目标是稳过线&#xff01; 核心思想&#xff1a;抓大放小&#xff0c;真题为王&#xff0…

Jupyter常见操作(持续更新)

Jupyter常见操作&#xff08;持续更新&#xff09; 本文主要整理一些常见的或者比较简单的Jupyter操作&#xff0c;尽量保证一次性整理出来&#xff0c;方便需要但是忘记的情况下可以直接查&#xff0c;希望能当字典。 1.查看Jupyter内核 jupyter kernelspec list 2.使用指定…

连点成画面积计算算法

连点成画面积计算算法 问题分析与算法设计 1. 问题特征分析 闭合多边形(起点和终点相同)线段可能交叉形成复杂形状需要处理自交多边形可能有多个内部空洞点数较多(≥50个点),需要高效算法2. 解决方案选择 采用平面扫描算法结合多边形布尔运算来准确计算最外层边界包围的…

华为云Flexus+DeepSeek征文 | 华为云MaaS平台上的智能客服Agent开发:多渠道融合应用案例

华为云FlexusDeepSeek征文 | 华为云MaaS平台上的智能客服Agent开发&#xff1a;多渠道融合应用案例 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不…

03.BUG

Bug 1.软件测试的生命周期2. BUG2.1 表述BUG的要素2.2 BUG级别2.3 BUG的声命周期 1.软件测试的生命周期 ​ 软件测试贯穿于软件的整个生命周期&#xff1a;软件测试的生命周期&#xff08;Software Testing Life Cycle, STLC&#xff09;,是指测试流程&#xff0c;这个流程是按…

【数据标注师】问答标注

目录 一、 **问答标注的认知底层架构**1. **三维评估体系**2. **四类问题处理范式** 二、 **五阶能力培养体系**▶ **阶段1&#xff1a;问题解析能力筑基&#xff08;2周&#xff09;**▶ **阶段2&#xff1a;答案质量评估训练**▶ **阶段3&#xff1a;复杂场景处理**▶ **阶段…

使用DBeaver 连接mysql,使用存储过程插入5万条数据

使用DBeaver连接MySQL并创建存储过程生成5万条数据 连接MySQL数据库 打开DBeaver&#xff0c;点击"数据库"菜单选择"新建连接"&#xff0c;选择MySQL驱动。填写主机、端口、数据库名称、用户名和密码等信息&#xff0c;测试连接成功后保存。 创建测试表…

某省赛题-windows内存取证

1.获取admin用户密码是多少&#xff1f; 这里我们使用hashdump之后用john爆破没有结果&#xff0c;然后使用lsadump出来了flag 2.获取ip和主机名是什么&#xff1f; 主机名&#xff1a; 看注册表 SAM&#xff1a;记录了所有的用户 SYSTEM&#xff1a;可以看主机名 SOFTWARE&a…

【软考高项论文】论信息系统项目的成本管理

摘要 在信息系统项目管理里&#xff0c;成本管理是极为关键的环节&#xff0c;直接影响项目的顺利开展与最终成败。本文结合项目管理实际情况&#xff0c;从项目成本基准的形成过程、项目S曲线的绘制以及成本控制的具体实施三个方面&#xff0c;详细阐述了对信息系统项目成本管…

AI人工智能技术应用于人社服务领域的创新研究报告

AI 人工智能技术应用于人社服务领域的创新研究报告 一、研究背景与市场概况 1.1 研究背景与政策环境 人工智能技术正深刻改变政府治理模式和公共服务方式。在国家全面推进数字化转型的战略背景下,人社部《数字人社建设行动实施方案》明确提出:到 2025 年,人社数字化底座…

javaEE-mybatis操作数据库

前言 在MySQL的学习阶段&#xff0c;我们知道了如何使用JDBC去操作&#xff0c;也正是因为学习了JDBC也知道其操作的繁琐&#xff0c;每次的CRUD操作都需要从数据库连接池中去获取数据库连接&#xff0c;然后再编写SQL语句&#xff0c;并绑定对应的参数&#xff0c;接着通过连…