什么是LRU算法Least Recently Used 淘汰算法以时间作为参考,淘汰最长时间未被使用的数据如果数据最近被访问过,那么将来被访问的几率也更高;会淘汰最长时间没有被使用的元素(都没人要你了,...不淘汰你淘汰谁)基本原理是:在缓存满时,将最近最久未使用的数据淘汰出缓存,以便给新的数据留出空间。...实现方式可以用:数组、链表等方式新插入的数据放在头部,最近访问过的也移到头部,空间满时将尾部元素删除图片编码实现public class LRUCache { //定义存储key的顺序表
0x00 楔子 最近客户在使用我们的的三维可视化平台的时候,总是会出现浏览器崩溃,webgl context lost的情况。...88%,而GPU1(独显) 使用率却未0,表示三维应用程序未使用独显。...0x01 原因探究 经过测试,发现电脑不使用独立显卡的原因大概分为几类: 驱动未正确安装 独立显卡的驱动未安装,或者显卡的驱动未正确安装,导致电脑的独立显卡不能使用。...程序指定使用集显 笔记本电脑,电脑可以同时使用集显和独显。...如果未安装显卡驱动,就安装显卡驱动即可。安装的时候,需要注意选择正确的版本。 如果是台式机,检查显示器接头是否接在独立显卡的接口上,如果接在集成显卡的接口上,改变接口即可。
楔子 在上一篇文章 《# [https://juejin.cn/post/707477...] webgl未使用独立显卡报告》 发表后,有读者在公众号给我发了一段评论,如下图所示: 我通过找电脑测试,
什么是LFULeast Frequently Used 最近最少使用,表示以次数为参考,淘汰一定时期内被访问次数最少的数据如果数据过去被访问多次,那么将来被访问的频率也更高比LRU多了一个频次统计,需要时间和次数两个维度进行判断是否淘汰关键流程新加入数据插入到队列尾部...//定义缓存容量 private int capacity; //定义存储key,value数值 private Map cacheValue; //存储key的使用频次...++ public V get(K key) { V value = cacheValue.get(key); //如果key获取的value不为空,则对这个key的使用次数...cacheObj.getLastTime()); }); } //定义比较对象 class CacheObj implements Comparable{ //定义使用的...key; this.count = count; this.lastTime = lastTime; } //用于比较大小,如果使用次数一样
自定义一个类,对列表进行封装,实现基于LRU算法的缓冲区。每次都从右侧放入和查找图书,缓冲区满时从左侧删除图书。 参考代码(lru_algorism.py): 测试结果:
本文讲解了操作系统中进程读内存时,维护高速缓存的页面淘汰算法,其中重点讲解了先进先出算法和最近最少使用算法,学习高速缓存 Cache 提高程序执行效率的原理。...常用的页面淘汰算法有四种:最优算法、随机算法、先进先出算法和最近最少使用算法。...---- 三、 最近最少使用算法 最近最少使用算法是每次淘汰最低频使用的数据。 这种算法不会出现倒挂现象(抖动现象)。...根据最近最少使用算法,1 2 3 三个数据最近最常使用的是 3,其次是 2,所以淘汰掉数据 1,如下图所示。...在数据 2 和 3 中,虽然都使用了 2 次,但数据 2 比数据 3 更最近被使用,所以数据 3 淘汰,这就是**【最近】【最少】使用算法**,结果如下图所示。
三、最近一段时间最久未使用(LRU)置换算法 1.作用 根据页面调入内存的使用情况进行决策,把最近一段时间最久未使用的页面予以淘汰。...最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。因为根据程序的局部性原理,刚刚被访问过页面,可能很快还被访问到。...由于无法预测各个页面将来的使用情况,只能利用“最近的的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。...根据最近一段时间最久未使用(LRU)置换算法,最近一段时间最久未使用的页面予以淘汰。页号7在最近一段时间内(也就是在页号之前运行的时间里)页号7最久没被使用,所以就淘汰页号7。...但因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,故又把该算法称为最近最久未使用算法NRU(Not Recently Used)。
计算机操作系统实验之页面置换算法(C语言) 实验目的 实验内容与基本要求 页面置换算法的基本内容 最佳置换算法 先进先出置换算法 最近最久未使用算法 实现思路 流程图 程序总流程图 OPT算法流程图 FIFO...常见的页面置换算法包括最佳置换、先进先出置换、最近最久未使用置换和Clock置换等。本次的实验实现的算法包括最佳置换算法(OPT)、先进先出置换算法(FIFO)和最近最久未使用算法(LRU)。...最近最久未使用算法 最近最久未使用算法,是选择当前内存中,最久没有被访问的页面来换出。...最近最久未使用算法有两种思路:1.与最佳置换算法类似,设置一个时间数组,记录从内存中页面上次访问至今的时间,哪个页面的时间最长则将它换出。如果要访问的页面已在内存中,则时间归零。...memoryList, phyNum); } } informationCount(missingCount, replaceCount, pageNum); } //最近最久未使用置换算法
3.最近最久未使用页面置换算法(LRU) 在之前的FIFO算法中,依据的是各个页面调入内存的时间,这并不能反映页面的真实使用情况。 ...由于无法预测页面未来的情况,所以只能利用“最近的过去”来作为预测未来的方法,LRU选择的是最近最久未使用的页面予以淘汰。 ...LRU是一种优秀的页面置换算法,但是需要硬件的支持,为了了解一个进程在内存中各个页面各有多少时间未被进程访问,以及如何快速地知道哪一个页面是最近最久未使用的页面,需要 寄存器+栈 来支持。 ...如果我们把n位寄存器的数看做是一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。当发生缺页时,首先将它置换出去。 ...因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,又称为最近未用算法NRU(Not recently used)。
LRU(Least Recently Used)算法是一种缓存淘汰算法,常用于缓存系统中,通过保留最近使用的数据而淘汰最久未使用的数据,以提高缓存的命中率。...最近被访问的数据节点被移动到链表的头部,而最久未被使用的数据节点位于链表的尾部。数据访问时的操作:当某个数据被访问时,如果数据已经在缓存中,将其从链表中移到头部,表示最近使用。...如果缓存已满,需要淘汰链表尾部的数据节点,即淘汰最久未使用的数据。淘汰数据的操作:当需要淘汰数据时,选择链表尾部的节点,即最久未使用的数据,进行淘汰。淘汰操作包括在链表和缓存中删除相应的节点。...数据结构:LRU算法通常使用两个数据结构来实现:双向链表:用于存储缓存中的数据,按照访问顺序排列。每次访问数据时,将该数据移到链表头部表示最近使用,而最近未使用的数据则位于链表尾部。...如果插入后缓存容量超过限制,则从双向链表尾部移除最久未使用的数据,并在哈希表中删除对应的映射。时间复杂度和空间复杂度:LRU算法的时间复杂度和空间复杂度主要取决于哈希表和双向链表的操作。
最佳置换算法(OPT) 2. 先进先出置换算法(FIFO) 3. 最近最久未使用置换算法(LRU) 4. 时钟置换算法(CLOCK) 5. 改进型的时钟置换算法 知识回顾与重要考点 知识总览 ?...最佳置换算法(OPT) ? ? 2. 先进先出置换算法(FIFO) ? ? 3. 最近最久未使用置换算法(LRU) ? 4. 时钟置换算法(CLOCK) ? ? ? ? ? ? ? 5....改进型的时钟置换算法 ? ? 假设页面的状态是: ? ? ? ? ? ? 知识回顾与重要考点 ?
举例如下: 缺页9次,总访问次数12次缺页率:9/12 = 75% LRU算法 (最近最久未使用算法) 利用局部性原理,根据一个作业在执行过程中过去的页面访问==历史来推测未来==的行为。...即淘汰最近最长时间未访问过的页面。 LRU置换算法的硬件支持 寄存器为每个在内存中的页面配置一个移位寄存器,用来记录某进程在内存中各页的使用情况。...1Rn-2Rn-3…R2R1R0当进程访问某物理块时,要将相应寄存器的Rn-1位置成1;同时,每隔一定时间将寄存器右移一位;如果把n位寄存器的数看作一个整数,那么具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面...栈利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。...LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。 Clock算法(时钟置换算法) 也称为NRU算法(最近未使用算法)是LRU和FIFO的折中算法。
按照 LRU 的策略,就关最底下的「手机管家」,因为那是最久未使用的,然后把新开的应用放到最上面: 现在你应该理解 LRU(Least Recently Used)策略了。...分析上面的操作过程,要让 put 和 get 方法的时间复杂度为 O(1),我们可以总结出 cache 这个数据结构必要的条件: 1、显然 cache 中的元素必须有时序,以区分最近使用的和久未使用的数据...,当容量满了之后要删除最久未使用的那个元素腾位置。...这个数据结构长这样: HashLinkedList 借助这个结构,我们来逐一分析上面的 3 个条件: 1、如果我们每次默认从链表尾部添加元素,那么显然越靠尾部的元素就是最近使用的,越靠头部的元素就是最久未使用的...注意我们实现的双链表 API 只能从尾部插入,也就是说靠尾部的数据是最近使用的,靠头部的数据是最久为使用的。
如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。...按照 LRU 的策略,就关最底下的「手机管家」,因为那是最久未使用的,然后把新开的应用放到最上面: {:align=center} 现在你应该理解 LRU(Least Recently Used)策略了...,当容量满了之后要删除最久未使用的那个元素腾位置。...这个数据结构长这样: 借助这个结构,我们来逐一分析上面的 3 个条件: 1、如果我们每次默认从链表尾部添加元素,那么显然越靠尾部的元素就是最近使用的,越靠头部的元素就是最久未使用的。...注意我们实现的双链表 API 只能从尾部插入,也就是说靠尾部的数据是最近使用的,靠头部的数据是最久为使用的。
这里作者就先实现了两种置换方法 第一种就是先进先出算法 第二种就是最久未使用算法 首先看到先进先出,我们最容易想到的就是队列了,所以实现起来比较简单 第二个就是最久未使用,这里面的难点就是在如何判断哪个页号是最久未使用的那个...new Random(); int k=ran.nextInt(i-j+1)+j;//范围是[j,i] return k; } public static void LRU(int i)//最近最久未使用...System.out.print(num[k]+" "); System.out.println(num[num.length-1]);*/ } else//如果不存在就需要先找到最久未使用的标志...)"); System.out.println("2.Least recently used algorithm(最近最久未使用算法)"); System.out.println("3.First...used algorithm(最近最久未使用算法)"); System.out.println("3.First in first out algorithm(先进先出页面置换算法)");
LRU(Least Recently Used) LRU 最近最少使用,是一种常见的淘汰(置换)算法,选择最近最久未使用的予以淘汰。常用于内存管理。...然后删除最近最少使用的源,直到有足够的空间来满足触发此源回收的请求。 – IndexedDB LRU策略 要求:初始化时指定最大容量 capacity,当缓存填满时,删除最近最少使用的项。...{head, tail, remove(), add()} 按照被使用的顺序存储 node,头部head为最近使用的,尾部tail是最久未使用的。...this.list.add(node) this.cacheMap.set(key, node) this.size += 1 // 容量超出,删除尾部节点(最久未使用...map 最后,第一个 key 为最久未被使用的。
常见的置换算法有以下五种: 最佳(Optimal, OPT)页面置换算法 先进先出(First-In First-Out, FIFO)页面置换算法 最近最久未使用(Least Recently Used...当分配的物理块为 3 个时,缺页次数为 9 次;而当分配的物理块增加为 4 个时,缺页次数反而增加到了 10 次 最近最久未使用(Least Recently Used, LRU)页面置换算法 选择最近最长时间未访问过的页面予以淘汰...2、0、1 三个页面,将最近最久未使用的页面 1 换出 .........,那么这个页面对应的寄存器的值就会越来越小,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。...因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。
第二种就是最少使用算法,主要是通过计数每个页号在一定时间内出现的次数,然后置换出出现次数最少的那一个页号,也就相当于是出现频率的意思,这种算法要记得和最近最久未使用算法进行区别,最久未使用算法的意思是...new Random(); int k=ran.nextInt(i-j+1)+j;//范围是[j,i] return k; } public static void LRU(int i)//最近最久未使用...System.out.print(num[k]+" "); System.out.println(num[num.length-1]);*/ } else//如果不存在就需要先找到最久未使用的标志...)"); System.out.println("2.Least recently used algorithm(最近最久未使用算法)"); System.out.println("3.First...used algorithm(最近最久未使用算法)"); System.out.println("3.First in first out algorithm(先进先出页面置换算法)");
57、可能是最全的页面置换算法总结了 最佳置换法(OPT) 先进先出置换算法(FIFO) 最近最久未使用置换算法(LRU) 时钟置换算法(CLOCK) 改进型的时钟置换算法 总结 58、共享是什么?...3、最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU,least recently used) :每次淘汰的页面是最近最久未使用的页面 实现方法:赋予每个页面对应的页表项中,用访问字段记录该页面自...当需要淘汰一个页面时,选择现有页面中t值最大的,即最近最久未使用的页面。 LRU性能较好,但需要寄存器和栈的硬件支持。LRU是堆栈类算法,理论上可以证明,堆栈类算法不可能出现Belady异常。 ?...4、时钟置换算法(CLOCK) 最佳置换算法性 OPT 能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近 OPT 算法性能的,但是实现起来需要专门的硬件支持...优先淘汰最近最久没访问的页面 性能很好;但需要硬件支持,算法开销大 CLOCK (NRU) 循环扫描各页面 第一轮淘汰访问位=0的,并将扫描过的页面访问位改为1。
领取专属 10元无门槛券
手把手带您无忧上云