LRU算法–缓存淘汰算法

LRU(最近最少使用)算法是一种缓存淘汰策略,基于局部性原理,当内存有限时,通过淘汰最近最少使用的页面来优化内存使用。文章介绍了LRU的思想、为何需要页面置换算法,以及FIFO和LRU的对比,并探讨了使用双向链表和Clock算法作为LRU的近似实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 什么是 LRU

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也很高”,反过来说“如果数据最近这段时间一直都没有访问,那么将来被访问的概率也会很低”,两种理解是一样的;常用于页面置换算法,是为虚拟页式存储管理服务的。

2. LRU 算法思想

达到这样一种情形的算法是最理想的:每次调换出的页面是所有内存页面中最迟将被使用的;这可以最大限度的推迟页面调换,这种算法,被称为理想页面置换算法。可惜的是,这种算法是无法实现的。
为了尽量减少与理想算法的差距,产生了各种精妙的算法,最近最少使用页面置换算法便是其中一个。LRU 算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到 。这个,就是著名的局部性原理——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近最少使用的那个页面调出内存。

注意:操作系统分页处理使用的分页调度算法是LRU算法的近似实现:Clock算法

3.为什么需要页面置换算法?

  • 内存是有限的,不可能把所有的页面都装进来
    – 缺页时需要进行页面置换

  • 页面置换的背后是个通用的问题
    –Web服务器的缓存
    –Redis ,memcached 的缓存
    –……

4.分页原理图

这里写图片描述

5. 假设使用 FIFO (先进先出) 实现页面置换算法

这里写图片描述

很明显, 按照FIFO算法, 虽然一个页面被频繁访问, 它还是很有可能被置换出去。

6. LRU 算法原理图

这里写图片描述

7. 使用双向链表实现LRU算法

算法实现:

public class LRUPageFrame
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值