首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法】LFU最近最少使用算法原理分析和编码实战

什么是LFULeast Frequently Used 最近最少使用,表示以次数为参考,淘汰一定时期内被访问次数最少的数据如果数据过去被访问多次,那么将来被访问的频率也更高比LRU多了一个频次统计,需要时间和次数两个维度进行判断是否淘汰关键流程新加入数据插入到队列尾部...,需要吧引用计数初始值为 1当队列中的数据被访问后,对应的元素引用计数 +1,队列按【次数】重新排序,如果相同次数则按照时间排序当需要淘汰数据时,将排序的队列末尾的数据删除,即访问次数最少图片编码实战public...//定义缓存容量 private int capacity; //定义存储key,value数值 private Map cacheValue; //存储key的使用频次...++ public V get(K key) { V value = cacheValue.get(key); //如果key获取的value不为空,则对这个key的使用次数...key; this.count = count; this.lastTime = lastTime; } //用于比较大小,如果使用次数一样

47700
您找到你想要的搜索结果了吗?
是的
没有找到

【软考学习13】图解页面淘汰算法,先进先出算法、最近最少使用算法

本文讲解了操作系统中进程读内存时,维护高速缓存的页面淘汰算法,其中重点讲解了先进先出算法和最近最少使用算法,学习高速缓存 Cache 提高程序执行效率的原理。...常用的页面淘汰算法有四种:最优算法、随机算法、先进先出算法和最近最少使用算法。...随机算法也是一个计算机模拟的算法,采用随机的方式进行页面淘汰,因为随机具有较大的不确定性,所以也没有多大的实际求解意义。 接下来重点讲解先进先出算法和最近最少使用算法。...---- 三、 最近最少使用算法 最近最少使用算法是每次淘汰最低频使用的数据。 这种算法不会出现倒挂现象(抖动现象)。...根据最近最少使用算法,1 2 3 三个数据最近最常使用的是 3,其次是 2,所以淘汰掉数据 1,如下图所示。

25820

内存页面置换算法

用页面置换算法决定应该换出哪个页面 五种页面置换算法: 1)最佳置换算法(OPT) 2)先进先出算法(FIFO) 3)最近最少使用算法(LRU) 4)时钟置换算法(CLOCK) 5)改进型的时钟置换算法...最佳置换算法(OPT): 每次选择淘汰的页面将是以后永不使用,最长时间内不再被访问的页面,无法实现 先进先出算法(FIFO) 把调入内存的页面根据调入的先后顺序排成一个队列,换出时选择队头页面,最大长度取决于...系统为进程分配了多少个内存块,性能比较差 最近最少使用算法(LRU) 每次淘汰的页面是最近未使用的页面,用访问字段记录该页面上次被访问以来所经历的时间, 当需要淘汰一个页面的时候,选择页面中时间值最大的...,需要专门的硬件支持,开销大 时钟置换算法(CLOCK) 内存中的页面通过链接指针,链接成一个循环队列,增加一个字段访问位字段,1表示访问过,0表示未访问过 循环遍历,如果是0就选择该页换出,如果是1就修改为...0,最多会经过两轮扫描 改进型的时钟置换算法 增加一个是否修改过条件,如果为1就修改过,如果为0就没修改过 页面分配策略 驻留级:请求分页存储管理中给进程分配的物理块集合,一般小于进程的总大小 页面分配

1.3K10

操作系统实验之存储管理第二版

上篇博客作者只介绍了两种算法 下面作者介绍另外两种算法 第一种就是最佳置换算法,这种算法只在理论成立,但是在实际操作中是无法进行操作的,他的理念就是,每次置换的时候是置换出将来最晚使用的页号,所以可以达到最大程度上的节约置换的操作...第二种就是最少使用算法,主要是通过计数每个页号在一定时间内出现的次数,然后置换出出现次数最少的那一个页号,也就相当于是出现频率的意思,这种算法要记得和最近最久未使用算法进行区别,最久未使用算法的意思是...,就是查找出那个是使用最少的 //我们通过置换的次数来判断list1中那个使用次数最少,这时候我们创建的数组长度的好处就体现出来了...in first out algorithm(先进先出页面置换算法)"); System.out.println("4.Least frequently used algorithm(最少使用算法...System.out.println("4.Least frequently used algorithm(最少使用算法)"); System.out.println("请选择以下的淘汰算法的号码

1K20

什么是缓存置换算法?

常见的置换算法 缓存置换算法常用的策略有三种,分别是: (1) FIFO:First In First Out,先进先出策略 (2) LFU:Least Frequently Used,最不经常使用策略...(3) LRU:Least Recently Used,最近最少使用策略 这三种淘汰数据的策略和侧重点各不一样,今天我们就来学习相关的知识。...会优先淘汰访问次数最少的数据。...显然,这是一种合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。缓存的每个数据都有引用计数,所有数据按照引用计数排序,具有相同引用计数的数据按照时间排序。 ?...总结 本文主要介绍了缓存置换算法的相关概念,原理和置换策略等相关内容,最后并对比分析了常见置换算法的优缺点。缓存作为一种互联网开发必备的组件,理解其置换算法的原理至关重要,值得每一位同学学习和研究。

1.6K20

魔方还原算法一 概述

关于上帝之数的研究不多说,有一篇很好的文章,感兴趣的可以看看,是卢昌海写的一篇博客 魔方与 "上帝之数" 上帝算法 任意给定一个魔方状态,上帝总能使用最少的步数来复原魔方,而上帝还原魔方的方法就叫做上帝算法...私以为其实也可以叫做万能算法吧,不管什么状态,只要一直这么转就能转到还原状态。 恶魔之数 这个恶魔之数不是 666 啊,而是指上面所说的那个转动序列最少步数是多少。...关于方向定义那一块也相当于对科先巴的二阶段算法开头了,下篇文章将做具体介绍。在所有魔方还原算法中,最出名的应该就是科先巴的二阶段算法,大家可以先想想如果让你设计一个还原算法,你会怎么设计,暴力搜索?...还真没错,就是暴力搜索,本质上所有的还原算法都是暴力搜索,就连上帝之数 20 那也是暴力搜索搜出来的。暴力搜索也有技巧,需要考虑怎么更有效率,这就涉及到以下几个关键问题: 如何定义一个魔方?...怎么根据魔方的特殊性省时省空间? 如何剪枝? 使用什么搜索算法? 也就是说怎么组织数据结构,使用什么搜索算法更又效率,也就应证了那句话 $数据结构+算法 = 程序$ 。

14300

操作系统:第五章 虚拟存储管理

最优算法、先进先出算法、最近最久未使用算法 时钟算法、最不常用算法 全局页面置换算法 置换页面的选择范围是所有可换出的物理页面 工作集算法、缺页率算法 5.3.1最优页面置换算法(OPT,optimal...由于无法预知哪些页面不会被使用,所以该算法无法实现,可以用作评判置换算法优劣的标准。...5.3.4最少使用置换算法( LFU) 思想类似于LRU,但是以最近一段时间页面访问次数为评判依据,每次将最近访问次数最少置换出去。...实现方式也是利用一个寄存器,每次被访问则将最高位置1,每隔一定时间右移一位,则寄存器中1个数最少的就是最近时间内访问次数最少的。 5.3.5 Clock置换算法 1....由于每次只能判断某个页面是否被访问过,,置换时将未使用过的页面置换出去,又把该算法称为最近未用算法(NRU)。 2.

1.5K10

美团暑期实习一面:页面置换算法

常见的置换算法有以下五种: 最佳(Optimal, OPT)页面置换算法 先进先出(First-In First-Out, FIFO)页面置换算法 最近最久未使用(Least Recently Used..., LRU)页面置换算法 时钟(CLOCK)页面置换算法 最少使用(Least Frequently Used, LFU)页面置换算法 最佳(Optimal, OPT)页面置换算法 最佳置换算法所选择的被淘汰页面将是以后永不使用的...利用 FIFO 置换算法时的置换图如下,可以看出,利用 FIFO 算法时进行了 12 次页面置换,比最佳置换算法正好多一倍。...OPT 算法向前看是无法实现了,那 LRU 这个向后看的算法具体该怎么实现呢?换句话说,这个过去一段时间内最久未被访问过的页面,操作系统是如何找出来的呢?...最少使用(Least Frequently Used, LFU)页面置换算法 LFU 核心思想就是对每个页面设置一个访问计数器,每当一个页面被访问时,该页面的访问计数器就累加 1。

2K30

操作系统内存换出---15

get_free_page FIFO页面置换 MIN页面置换 LRU页面置换 LRU的准确实现,用时间戳 LRU准确实现,用页码栈 LRU近似实现 - 将时间计数变为是和否 Clock算法的分析与改造...---- MIN页面置换 min算法需要知道将来每个页的使用时间,将最晚使用到的页先换出,但是这也是该算法的致命缺陷,因为我们无法知道某个页将来什么时候会被使用到。...原始的Clock 算法其实是用最近没有使用的思想来近似最近最少使用,但是这样容易导致算法退化了FIFO。...为了体现最近最少使用的思想,就额外引入了一个定时清除R位的指针,定时清除指针会定时将当前指向页面的引用位设置为0,然后往后移动一格。...就无法区分出哪一个页是最近最少使用的了,加入定时清除R位后,就符合最近最少使用的思想了,大家好好体会一下。

36110

操作系统实验之存储管理

这里作者就先实现了两种置换方法 第一种就是先进先出算法 第二种就是最久未使用算法 首先看到先进先出,我们最容易想到的就是队列了,所以实现起来比较简单 第二个就是最久未使用,这里面的难点就是在如何判断哪个页号是最久未使用的那个...-count; System.out.println(df.format(count)); list1.clear(); } public static void LFU(int i)//最少使用算法...in first out algorithm(先进先出页面置换算法)"); System.out.println("4.Least frequently used algorithm(最少使用算法...System.out.println("4.Least frequently used algorithm(最少使用算法)"); System.out.println("请选择以下的淘汰算法的号码...zhiling; int address; public node() { // TODO Auto-generated constructor stub } } } 这里面还有最佳优先算法最少使用置换算法

80410

操作系统高频面试题(2022最新整理)

死锁怎么产生?怎么避免?...时间片轮转算法的效率和时间片的大小有很大关系:因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会过多时间。...选择淘汰哪一页的规则就是页面置换算法 几种页面置换算法: 最佳置换算法(理想):将当前页面中在未来最长时间内不会被访问的页置换出去 先进先出:淘汰最早调入的页面 最近最久未使用 LRU:每个页面有一个t...来记录上次页面被访问直到现在,每次置换置换t值最大的页面(用寄存器或栈实现) 时钟算法clock(也被称为最近未使用算法NRU):页面设置访问为,将页面链接为一个环形列表,每个页有一个访问位0/1,...最少使用算法LFU:设置寄存器记录页面被访问次数,每次置换当前访问次数最少的。

38020

计算机系统基础:虚拟存储管理知识笔记

4、页面置换法在进程运行过程中,如果发生缺页,此时主存中无空闲块时,为了保证进程正常运行,需要从主存中调出一页程序或数据传送磁盘对换区。系统要决定哪个页面调出,需要根据一定的页面置换算法来确定。...置换算法的优劣会直接影响系统的性能,不好的算法可能会造成系统抖动。即刚被换出的页很快又被访问,需重新调入,导致系统频繁更换页面。这样会把进程的运行时间花费在页面置换的工作上,造成系统性能大大降低。...1、最佳置换算法理想化的算法,选择那些永远不被使用的、或者最长时间内不再被访问的页面置换出去。该算法性能做好,但实现非常困难。...2、先进先出置换算法算法的主要思想是淘汰最先进入主存的页面,也就是选择在主存中驻留时间最久的页面置换掉。特点:最直观、性能最差的算法。...3、最近最少使用置换法 LRU把最近最少使用的页面进行置换掉。4、最近未用置换算法将最近一段时间没有使用过的页面置换掉。是一种和LRU接近的算法

25530

后端太卷?冲测开去了!

死锁是怎么发生的? 回答:四个必要条件和银行家算法(上课学过) 小林补充 死锁问题的产生是由两个或者以上线程并行执行的时候,争夺资源而互相等待造成的。...最近最久未使用置换算法 最近最久未使用(LRU)的置换算法的基本思路是,发生缺页时,选择最长时间没有被访问的页面进行置换,也就是说,该算法假设已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用...还是以前面的请求的页面序列作为例子,假设使用最近最久未使用置换算法,则过程如下图: 最近最久未使用置换算法 在这个请求的页面序列中,缺页共发生了 9 次,页面置换共发生了 6 次,跟先进先出置换算法比较起来...为了完全实现 LRU,需要在内存中维护一个所有页面的链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。 困难的是,在每次访问内存时都必须要更新「整个链表」。...最不常用算法 最不常用(LFU)算法,这名字听起来很调皮,但是它的意思不是指这个算法不常用,而是当发生缺页中断时,选择「访问次数」最少的那个页面,并将其淘汰。

20230

【Oracle】-【LRU和DBWR】-LRU算法与DBWR中的应用

Oracle体系结构中经常看到LRU算法,Least Recently Used,也有叫“最近最少使用页面置换算法”,简单讲,Oracle会将内存中最近不用的数据库移出内存以腾出空间来加载另外的数据...关于这个算法,有一种最理想的计算,就是每次调换出的内存是所有内存中最迟将被使用的,可以最大限度地推迟内存调换,但这种算法是理想内存置换,无法实现。...为了减少与理想算法的差距,又出现了各种精妙的算法,LRU就是其中一个。...因此我们只需要在每次内存调换时,找到最近最少使用的内存数据调出内存,这就是LRU算法的内容。...有的书中提到的“如果数据库空运转,最终DBWR会将全部缓冲区存储区写入磁盘”,DBWR会将dirty缓冲区写入磁盘,使用的是LRU算法,如上原理所述,根据DBWR触发的若干条件,外加LRU算法,DBWR

61670

推荐8-设置Redis的LRU策略

概念 LRU(Least Recently Used)最近最少使用算法是众多置换算法中的一种。...maxmemory Redis中有一个maxmemory概念,主要是为了将使用的内存限定在一个固定的大小。Redis用到的LRU 算法,是一种近似的LRU算法。...当Redis内存使用达到指定的限制时,就需要选择一个置换的策略。 置换策略 当Redis内存使用达到maxmemory时,需要选择设置好的maxmemory-policy进行对老数据的置换。...下面是可以选择的置换策略: noeviction: 不进行置换,表示即使内存达到上限也不进行置换,所有能引起内存增加的命令都会返回error allkeys-lru: 优先删除掉最近最不经常使用的key...3 置换策略是如何工作的 理解置换策略的执行方式是非常重要的,比如: 客户端执行一条新命令,导致数据库需要增加数据(比如set key value) Redis会检查内存使用,如果内存使用超过maxmemory

1.1K20

【LFU】一文让你弄清 Redis LFU 页面置换算法

上一次,相信大家已经知道关于 LRU 页面置换算法的思想和实现了,这里可以一键直达: 【LRU】一文让你弄清 Redis LRU 页面置换算法 Redis 的淘汰策略中,关于 LFU 页面置换算法,今天咱们来捋一捋到底思想是啥...,可以如何去实现它 这就让我们进入状态吧 ✔LFU 的思想和实现 LFU 全称为:Least frequently used 含义为:使用频次最少的,即为 最不经常使用的 思想是:如果数据在一段时间被访问的次数较少...,那么在未来的一段时间,这段数据被访问的几率就会更小 可以看到 LRU 和 LFU 思想上的区别是非常明显的 LRU 强调最近最少使用,关注的是最近有没有使用过 LFU 强调的是一段时间的使用次数,关注的是频次...仓库地址中 main.go 代码实现和 LRU 的一致,只不过,咱们的句柄和具体实现换成了 LFU 的 代码运行效果如下: 总结 至此,咱们将 Redis 淘汰策略中的 LRU 和 LFU 页面置换算法的思想...我是阿兵云原生,欢迎点赞关注收藏,下次见~ 文中提到的技术点,感兴趣的可以查看这些文章: 【LRU】一文让你弄清 Redis LRU 页面置换算法 什么是单点登录?什么又是 OAuth2.0?

14530

操作系统之存储管理

(页面淘汰算法) 最佳算法-->先进先出-->第二次机会-->时钟算法-->最近未使用-->最近最少使用-->最不经常使用-->老化算法-->工作集-->工作集时钟 3.5.1 最佳置换算法(OPT)...3.5.5 最近未使用算法(NRU) 选择在最近一段时间内未使用过的一页并置换 实现:置换页表表象的两位,访问位R,修改位M。硬件会设置这些位,如果硬件没有这些位,则可用软件模拟。...3.5.6 最近最少使用算法(LRU)(重点) 选择最后一次访问时间距离当前时间最长的一页并置换,即置换使用时间最长的一页 性能接近最佳页面置换算法 实现:时间戳或维护一个访问页的栈,导致开销较大。...3.5.7 最不经常使用算法(NFU) 即Not frequently Used,选择访问次数最少的页面置换 一开始提出此算法是LRU(最近最少使用算法)的一种软件解决方案,但是实际上差距有点大。...这种方式使得已修改和未修改的页面都仍然留在内存中,当进程以后再次访问这些页面时,只需较小的开销,使这些页面又返回到该进程的驻留集中。

3.3K111

页面置换算法详解

然而,它的性能并不总是十分理想: 其一,所置换的页面可以是很久以前使用过但现已不再使用的初始化模块 其二,所置换的页面可以包含一个被大量使用的变量,它早就初始化了,但仍在不断使用 2、OPT(最佳置换算法...这种页面置换算法确保对于给定数量的帧会产生最低的可能的缺页错误率 FIFO 和 OPT 算法的区别在于:除了在时间上向后或向前看之外,FIFO 算法使用的是页面调入内存的时间,OPT 算法使用的是页面将来使用的时间...3、LRU(最近最少使用算法) (淘汰最近没有使用的页面) 选择最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。...5、LFU(最不常用算法) 最不经常使用(LFU)页面置换算法要求置换具有最小计数的页面。 这种选择的原因是,积极使用的页面应当具有大的引用计数。...一种解决方案是,定期地将计数右移 1 位,以形成指数衰减的平均使用计数。 6、MFU(最常使用算法) 最经常使用(MFU)页面置换算法是基于如下论点:具有最小计数的页面可能刚刚被引入并且尚未使用

3K11

【LFU】一文让你弄清 Redis LFU 页面置换算法

上一次,相信大家已经知道关于 LRU 页面置换算法的思想和实现了,这里可以一键直达: 【LRU】一文让你弄清 Redis LRU 页面置换算法 Redis 的淘汰策略中,关于 LFU 页面置换算法,今天咱们来捋一捋到底思想是啥...,可以如何去实现它 这就让我们进入状态吧 ✔LFU 的思想和实现 LFU 全称为:Least frequently used 含义为:使用频次最少的,即为 最不经常使用的 思想是:如果数据在一段时间被访问的次数较少...,那么在未来的一段时间,这段数据被访问的几率就会更小 可以看到 LRU 和 LFU 思想上的区别是非常明显的 LRU 强调最近最少使用,关注的是最近有没有使用过 LFU 强调的是一段时间的使用次数,关注的是频次...仓库地址中 main.go 代码实现和 LRU 的一致,只不过,咱们的句柄和具体实现换成了 LFU 的 代码运行效果如下: 总结 至此,咱们将 Redis 淘汰策略中的 LRU 和 LFU 页面置换算法的思想...我是阿兵云原生,欢迎点赞关注收藏,下次见~ 文中提到的技术点,感兴趣的可以查看这些文章: 【LRU】一文让你弄清 Redis LRU 页面置换算法 什么是单点登录?什么又是 OAuth2.0?

13530
领券