最近最久未使用页面淘汰算法———LRU算法(java实现)

LRU算法,即Last Recently Used ---选择最后一次访问时间距离当前时间最长的一页并淘汰之——即淘汰最长时间没有使用的页

按照最多5块的内存分配情况,实现LRU算法代码如下:

public class LRU {

	private int theArray[];
	private int back;      //定义队尾
	private int currentSize;     //队列中存放元素个数
	private int maxSize=5;       //队列中能存放元素的个数

	public LRU(){
		theArray=new int[maxSize];
		back=0;
		currentSize=0;
	}
    public void queue(int a[]){
    	for(int i=0;i<a.length;i++){
    		enQueue(a[i]);
    	}
    }

	public void enQueue(int x){           //入队
		beUsed(x);                        //先判断是否已存在该页号,若存在,删除
		if(currentSize<maxSize){
			theArray[back]=x;
			back++;
			currentSize++;
		}else if(currentSize==maxSize){             //满了
			for(int i=0;i<maxSize-1;i++){
				theArray[i]=theArray[i+1];
			}
			theArray[maxSize-1]=x;
		}
        for(int i=0;i<currentSize;i++){
        	System.out.print(theArray[i]);
        }
        System.out.println();
	}
	public void beUsed(int x){            //判断是否已存在该页号,若存在,删除已有的
		for(int i=0;i<currentSize;i++){
			if(theArray[i]==x){
				for(int j=i;j<currentSize-1;j++){
					theArray[j]=theArray[j+1];
				}
				currentSize--;
				back--;
			}
		}
	}
	public static void main(String[] args) {
		LRU lru=new LRU();
		int a[]={4,7,0,7,1,0,1,2,1,2,6};
        lru.queue(a);
	}

}

测试结果如下:

4

47

470

407

4071

4710

4701

47012

47021

47012

70126

最近最久未使用页面淘汰算法———LRU算法(java实现),布布扣,bubuko.com

时间: 2024-10-06 05:18:30

最近最久未使用页面淘汰算法———LRU算法(java实现)的相关文章

使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法

一,LRU算法介绍 LRU算法是最近最少未使用算法.当内存缺页时,总是优先选出距离当前最久未使用的页面换出,并把当前的缺页换入.该算法可用栈模拟实现. 栈顶总是保存当前最近访问的页面号,栈底则总是保存最久未访问的页面号.对于下一个页面,有两种情况: ①命中,则需要:更新栈顶元素.即将当前命中的页面号放到栈顶. ②未命中,这里还需要考虑栈是否满了.1)若栈未满,直接将未命中的页面号放到栈顶即可.2)栈已经满了,则需要选中一页换出(栈底元素是最久未访问的页面),然后再将新页面放入栈顶. 二,代码实现

缓存淘汰算法--LRU算法

1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高". 1.2. 实现 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部: 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部: 3. 当链表满的时候,将链表尾部的数据丢弃. 1.3. 分析 [命中率] 当存在热点数据时,LRU的效率很好,但偶发性的

最久未使用算法和最少次数算法

最久未使用算法和最少次数算法 参考 LRU算法 缓存淘汰策略 缓存算法(FIFO .LRU.LFU三种算法的区别) LRU算法(最久未使用算法) 当数据满时,淘汰最久未使用的数据.该算法需要获取所有缓存数据中最久未使用的数据. 链表实现 创建一个固定大小的链表,数据首次被访问,插入到链表头部,如果链表已满则先删除尾元素. 数据被再次访问,将数据移动到链表头部. LFU算法(最少次数算法) 当数据满时,淘汰访问频率最低的数据.该算法需要获取所有缓存数据中访问次数最少的数据. 原文地址:https:

LRU算法 - LRU Cache

这个是比较经典的LRU(Least recently used,最近最少使用)算法,算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. 一般应用在缓存替换策略中.其中的”使用”包括访问get和更新set. LRU算法 LRU是Least Recently Used 近期最少使用算法.内存管理的一种页面置换算法,对于在内存中但又不用的数据快(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据,一

页面置换常用的算法总结

本文转载自:http://blog.csdn.net/a724888/article/details/70038420 进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区. 选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种. 1. 最佳置换算法(OPT) 最佳(Optimal, OPT)置换算法所选择的

[收藏]:[算法]LRU和LFU的区别

LRU和LFU是不同的! LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面! LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页! 比如,第二种方法的时期T为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4 注意,当调页面4时会发生缺页中断 若按LRU算法,应换页面1(1页面最久未被使用) 但按LFU算法应换页面3(十分钟内,

C语言实现FIFO算法与LRU算法

在操作系统中,当程序在运行过程中,若其所要访问的页面不再内存中而需要把他们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存调出一页程序或数据送磁盘的兑换区中.但哪一个页面调出,须根据一定的算法确定.通常,把选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms).置换算法的好坏将直接影响到系统的性能. 1) 先进先出(FIFO)页面置换算法 该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰.该算法实现简单,只需

缓存置换策略-LRU算法

LRU算法 LRU算法定义: LRU算法是指最近最少使用算法,意思是LRU认为最近使用过的数据,将来被访问的概率会大,最近没有被访问的数据意味着以后刚问的概率小. 为何要用LRU算法: 1.我们的存储空间是有限的,当存储空间满了之后,要删除哪些数据呢,才能会时缓存的命中率高一些呢 2.LRU算法还是比较简单的. 算法: 最常见的算法是使用一个链表来实现 1)将新数据插入到表头 2)每当缓存命中时,将数据移动到表头 3)当l存储空间满了的时候将链表尾部的数据删除 缺点:链表实现,需要遍历链表找到命

Redis的LRU算法

Redis的LRU算法 LRU算法背后的的思想在计算机科学中无处不在,它与程序的"局部性原理"很相似.在生产环境中,虽然有Redis内存使用告警,但是了解一下Redis的缓存使用策略还是很有好处的.下面是生产环境下Redis使用策略:最大可用内存限制为4GB,采用 allkeys-lru 删除策略.所谓删除策略:当redis使用已经达到了最大内存,比如4GB时,如果这时候再往redis里面添加新的Key,那么Redis将选择一个Key删除.那如何选择合适的Key删除呢? CONFIG