`
luoweifu
  • 浏览: 63316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

LRU算法

 
阅读更多

LRULeastRecentlyUsed的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU算法就是将最近最久未使用的页面予以淘汰。

可以用一个特殊的栈来保存当前正在使用的各个页面的页面号。当一个新的进程访问某页面时,便将该页面号压入栈顶,其他的页面号往栈底移,如果内存不够,则将栈底的页面号移除。这样,栈顶始终是最新被访问的页面的编号,而栈底则是最近最久未访问的页面的页面号。

java代码实现LRU算法如下:

import java.util.ArrayList;
import java.util.List;


public class LRU {
	/**
	 * 内存块的个数
	 */
	public static final int N = 5;
	/**
	 * 内存块数组
	 */
	Object[] array = new Object[N];
	private int size;
	
	public LRU() {
	}
	/**
	 * 判断内存区是否为空
	 * @return
	 */
	public boolean isEmpty() {
		if(size == 0) {
			return true;
		} else {
			return false;
		}
	}
	/**
	 * 判断内存区是否达到最大值
	 * @return
	 */
	public boolean isOutOfBoundary() {
		if(size >=N) {
			return true;
		} else {
			return false;
		}
	}
	/**
	 * 查找元素o在数组中的位置
	 * @param o
	 * @return
	 */
	public int indexOfElement(Object o) {
		for(int i=0; i<N; i++) { 
			if(o == array[i]) {
				return i;
			}
		}
		return -1;
	}	
	/**
	 * 有新的数据o需要申请内存
	 * @param o
	 * @return 移出内存区的数据
	 */
	public Object push(Object o) {
		int t = -1;
		if(!isOutOfBoundary() && indexOfElement(o) == -1){
			array[size] = o;
			size ++;
		} else if(isOutOfBoundary() && indexOfElement(o) == -1){
			for(int i=0; i<size-1; i++) {
				array[i] = array[i+1];				
			}
			array[size-1] = o;
		} else {
			t = indexOfElement(o);
			for(int i=t; i<size-1; i++) {
				array[i] = array[i+1];
			}
			array[size-1] = o;
		}
		if( -1 == t) {
			return null;
		} else {
			return array[t];
		}
	}
	/**
	 * 输出内存区中的各数据
	 */
	public void showMemoryBlock() {
		for(int i=0; i<size; i++) {
			System.out.print(array[i] + "\t");
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Integer iter[] = {4,7,0,7,1,0,1,2,1,2,6};
		LRU lru = new LRU();
		for(int i=0; i<iter.length; i++) {
			lru.push(iter[i]);
			lru.showMemoryBlock();
			System.out.println();
		}
	}

}

LRU算法也可以用于一些实际的应用中,如你要做一个浏览器,或类似于淘宝客户端的应用的就要用到这个原理。大家都知道浏览器在浏览网页的时候会把下载的图片临时保存在本机的一个文件夹里,下次再访问时就会,直接从本机临时文件夹里读取。但保存图片的临时文件夹是有一定容量限制的,如果你浏览的网页太多,就会一些你最不常使用的图像删除掉,只保留最近最久使用的一些图片。这时就可以用到LRU算法 了,这时上面算法里的这个特殊的栈就不是保存页面的序号了,而是每个图片的序号或大小;所以上面这个栈的元素都用Object类来表示,这样的话这个栈就可以保存的对像了。

分享到:
评论

相关推荐

    c语言实现的LRU算法

    在C语言中实现LRU算法,需要理解数据结构和算法的基础知识,以及如何在C语言中有效地管理内存。 首先,LRU算法的核心是数据结构的选择。通常使用双向链表来存储数据,因为双向链表允许我们快速地插入和删除元素,...

    Java实现LRU算法.zip

    在操作系统中,当内存不足以容纳所有活动页面时,LRU算法会选择最近最久未使用的页面进行淘汰,以腾出空间加载新的页面。 在Java中实现LRU算法,通常会使用数据结构如HashMap或LinkedHashMap来存储页面及其访问信息...

    lru算法实验报告

    LRU (Least Recently Used) 算法是一种常用的页面替换策略,用于管理计算机内存中的页面。在虚拟存储系统中,由于物理内存有限,当所有页面无法同时驻留在内存时,LRU 算法则用于决定将哪个页面换出到磁盘。它的基本...

    东南大学操作系统实验——实现LRU算法及其近似算法

    LRU算法是一种常见的虚拟内存管理策略,它根据页面的使用历史来决定替换哪个页面。当内存中的页面被新页面占用时,LRU算法会优先淘汰最近最久未使用的页面。 实验内容包括实现LRU算法的两种不同变体:计数器实现和...

    LRU算法 lru算法

    LRU算法就是在这个过程中发挥作用,选择最近最久未使用的页面优先进行替换。 LRU算法的基本思想是:当内存满时,新进来的页面会替换掉最近最少使用的页面。这里的“最近”是指最近一次被访问的时间,“最少使用”是...

    操作系统之LRU算法(java)(csdn)————程序.pdf

    操作系统之LRU算法(Java) LRU(Least Recently Used,最近最少使用)算法是一种常用的页面置换算法,用于操作系统中管理内存页面。该算法的基本思想是:当进程在 CPU 上运行时,如指令中涉及逻辑地址时,操作系统...

    LRU 算法(c语言)

    ### LRU算法(Least Recently Used)在C语言中的实现 #### 概述 LRU算法是一种常用的缓存淘汰策略,在计算机科学中广泛应用于操作系统、数据库系统以及Web浏览器等场景。其核心思想是当缓存满时,优先淘汰最近最少...

    LRU算法.zip

    当内存不足以容纳所有数据时,LRU算法会选择最近最少使用的数据进行淘汰。它的基本思想是:如果一个数据最近被访问过,那么它在未来的访问概率会比较高。LRU算法的核心在于维护一个有序的数据结构,例如链表或者哈希...

    LRU算法 C++实现

    在操作系统中,当内存不足以容纳所有活动进程的数据时,LRU算法会被用来决定哪些页面应该被换出到磁盘上,以便为新进来的页面腾出空间。它的核心思想是:最近最少使用的页面在未来最不可能被使用,因此优先淘汰。 ...

    LRU算法模拟实验

    在操作系统中,LRU算法用于决定何时将页面从内存移出,以便为新的页面腾出空间。当内存中的页面数量不足以容纳所有需要的页面时,LRU算法会选择最长时间没有被访问的页面进行替换。 实验目的是通过编程模拟LRU算法...

    LRU算法实现(C++版本)

    1.资源包含LRU算法整个项目,可直接在vs2019上运行项目,如果版本不对可选择把项目中cpp文件复制到自己的vs中运行 2.LRU 算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也...

    操作系统LRU算法实验报告

    LRU算法通过维护一个页面访问历史来跟踪每个页面的使用情况,当内存满时,它会优先淘汰那些长时间未被访问的页面。 在电子科技大学的这个实验报告中,学生需要设计并改进LRU算法的实现。实验的目标是让用户自定义页...

    LRU算法实现_实验报告

    在实际操作系统中,LRU算法可能需要更复杂的数据结构和算法来支持,例如使用哈希表来加速页面查找,或者使用位图来跟踪页面状态。然而,这个简单的C语言实现提供了一个直观的理解基础,展示了LRU算法的基本操作和...

    操作系统LRU算法小程序

    LRU算法就是在此背景下诞生的,它的核心思想是:最近最少使用的页面在未来最可能仍然是最少使用的。 LRU算法的基本操作流程如下: 1. 记录每个页面的访问时间。 2. 当内存满时,新进来的页面无法放入内存,此时需要...

    操作系统 LRU算法 实验报告 及 程序代码

    当物理内存不足以容纳所有活动进程时,LRU算法会选择最近最少使用的页面进行淘汰,以腾出空间给新的或需要访问的页面。 在计算机科学中,操作系统负责管理和调度系统的各种资源,包括内存。内存管理是操作系统的...

    进程调度算法(LRU算法)

    ### LRU算法 #### 1. LRU算法简介 LRU(Least Recently Used)算法是一种常用的内存管理与虚拟缓存置换算法,其基本思想是当缓存满时,优先淘汰最近最少使用的页面。这种算法能够很好地利用程序访问的局部性原理,...

    LRU算法(操作系统)

    ### LRU算法(操作系统) #### 一、LRU算法简介 LRU(Least Recently Used,最近最少使用)算法是一种常用的操作系统存储器管理中的页面置换算法。它的基本思想是:当内存空间不够时,系统会将最近最久未使用的...

    基于C语言的FIFO和LRU算法

    基于C语言的FIFO和LRU算法的实现。

    lru算法C语言实现

    ### LRU算法C语言实现详解 #### 一、引言 LRU(Least Recently Used,最近最少使用)算法是一种常用的数据缓存淘汰策略,在计算机科学领域应用广泛,尤其是在操作系统、数据库管理和Web服务器缓存管理等方面。本文...

    OPT和LRU算法C语言实现

    用C语言实现的OPT和LRU算法,下载后直接用VC++6.0打开即可编译运行。亲测可用。

Global site tag (gtag.js) - Google Analytics