`

LRU近期最少使用算法

 
阅读更多
LRU是Least Recently Used的缩写,即最少使用算法。
位于org.apache.commons.collections.map包中的LRUMap,利用LRU(least recently used)算法对最近使用的保留,最不经常使用的会被删除,当Map满的时候。该MAP在处理cache时还是挺有用的。

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

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算法LRU算法LRU算法

    LRU(Least Recently Used,最近最少使用)是一种常用的页面替换算法,用于解决计算机内存不足时如何选择淘汰数据的问题。在缓存或者数据库管理系统中,LRU算法被广泛应用,因为它的实现简单且效果良好。 LRU算法的...

    LRU算法的实现

    近期最少使用算法

    最近最少使用(LRU)置换算法

    最近最久未使用(LRU) 选择最后一次访问时间距离当前时间最长的一页并淘汰之 LRU软件实现 设置一个页号栈, 当一个页面被访问时,就立即将它的页号压入页号栈,并检查页号栈中是否有与刚压入栈顶的相同的页号,若...

    c语言实现的LRU算法

    LRU(Least Recently Used)算法是一种常用的页面替换策略,它基于“最近最少使用”的原则,即当内存空间不足时,最长时间未被访问过的页面优先被淘汰。在C语言中实现LRU算法,需要理解数据结构和算法的基础知识,...

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

    在本实验中,学生将深入理解操作系统的内存管理机制,特别是LRU(Least Recently Used,最近最少使用)页面置换算法。LRU算法是一种常见的虚拟内存管理策略,它根据页面的使用历史来决定替换哪个页面。当内存中的...

    cachelru:最近最少使用算法

    其中,“最近最少使用算法”(Least Recently Used, LRU)是缓存淘汰策略的一种常见实现,尤其在JavaScript开发中被广泛采用。 LRU算法基于一个假设:最近频繁使用的数据在将来也更可能被频繁使用。因此,当缓存...

    用C++实现LRU页面置换算法

    使用LRU算法实现页面置换算法。LRU算法基于一种假设,长期不使用的数据,在未来的使用性也不大。因此,当数据占用内存达到一定的阙值时,我们要移除最近最少使用的数据。LRU算法中,使用了一种有趣的数据结构,叫做...

    LRU算法 lru算法

    LRU(Least Recently Used)算法是一种常用的页面替换策略,它基于“最近最少使用”的原则来决定何时替换内存中的页面。在计算机系统中,由于物理内存有限,当程序需要的内存超过实际可用内存时,操作系统会将部分...

    LRU页面置换算法

    LRU(Least Recently Used,最近最少使用)页面置换算法是一种常用的内存管理策略,它用于解决在有限的物理内存中管理大量虚拟内存页的问题。当内存不足时,LRU算法会淘汰那些最近最少使用的页面,以腾出空间供新...

    Java实现LRU算法.zip

    总的来说,Java实现LRU算法的关键在于利用数据结构特性来跟踪页面的使用频率,通过淘汰最近最少使用的页面来优化内存使用。通过学习和理解LRU算法的实现,我们可以更好地理解和处理内存限制问题,提高系统的性能和...

    LRU 页面置换算法 最近最久未使用 源代码 c/c++

    其中,“最近最少使用”(Least Recently Used,简称LRU)算法是一种常用且高效的页面置换策略。本文将基于给定的C/C++源代码,深入解析LRU页面置换算法的工作原理及其具体实现细节。 #### LRU算法的核心思想 LRU...

    LRU.rar_LRU_lru 算法_lru算法

    LRU算法的核心思想是:最近最少使用的数据在未来最不可能立即被使用。 LRU算法的工作机制如下: 1. 记录每个数据项(如内存中的页面)的访问时间,并维护一个按访问时间排序的数据结构,通常是链表或哈希映射加...

    LRU算法 C++实现

    它的核心思想是:最近最少使用的页面在未来最不可能被使用,因此优先淘汰。 LRU算法的实现通常依赖于数据结构,如哈希表和双向链表。在C++中,我们可以使用`std::unordered_map`来存储页面及其访问时间,同时使用`...

    最近最久LRU页面置换算法

    LRU(Least Recently Used)页面置换算法是一种在操作系统中用于管理内存资源的策略,它遵循一个简单的原则:当内存满时,最近最久未使用的页面将被替换出去。这个算法假设最近频繁使用的数据将来也更可能被频繁访问...

    页面置换算法FIFO:先进先出 NUR: 最近未使用算法

    LRU(Least Recently Used)算法与LFU不同,它只关注最近一次访问的时间,即最近最少使用的页面会被优先替换。LRU在应对数据访问变化方面有较好的适应性,但它只是时间上的局部优化,没有考虑长期访问特性。 为了...

    由链表实现的存储管理 先出页面置换算法、最近最少使用LRU页面置换算法、最佳置换算法

    本主题聚焦于通过链表实现的存储管理,特别是涉及了三种重要的页面置换算法:先出(FIFO)页面置换算法、最近最少使用(LRU)页面置换算法和最佳(OPT)置换算法。 首先,内存分配与回收是存储管理的基础。当一个新...

    LRU.rar_LRU_LRU2 算法_MRU_lru2

    LRU(最近最少使用算法) and MRU(最近最常使用算法)所谓的LRU(Least recently used)算法的基本概念是:当内存的剩余的可用空间不够时,缓冲区尽可能的先保留使用者最常使用的数据,换句话说就是优先清除”较不常使用的...

    LRU.rar_LRU_lru C_lru算法

    LRU(Least Recently Used)是最常用的页面替换算法之一,它基于“最近最少使用”的原则来决定何时替换内存中的页面。当内存满时,LRU算法会优先淘汰最近最久未使用的页面。在操作系统中,LRU算法常用于虚拟内存管理...

    LRU算法.zip

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

    FIFO、OPT、LRU页面置换算法实验代码和截图

    LRU(Least Recently Used)页面置换算法是一种基于最近最少使用的页面置换算法。该算法会将最近最少使用的页面移除,以腾出空间供其他页面使用。这种算法的优点是可以减少页面错误率,但缺点是实现难度高。 实验...

Global site tag (gtag.js) - Google Analytics