LRU:
LinkedHashMap ,
实现思路:HashMap + 双向链表环
按照最近访问/插入顺序,始终保持队列尾部的为最近访问或者最近插入的数据,删除从对头开始!
LinkedHashMap扩展如下方法即可:
protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { return false; }
LFU:
实现思路:HashMap + PriorityQueue
下面是个根据Key的自然数据排序的案例(类似,可以把Key包装成一个可排序的包装类型,根据访问次数确定顺序):
import java.util.HashMap; import java.util.PriorityQueue; /** * * @author xinchun.wang * @email: 532002108@qq.com */ public class LFUHashMap<K, V> { private static final int max_size = 10; HashMap<K, V> map = new HashMap<K, V>(); PriorityQueue<Node<K>> tSet = new PriorityQueue<Node<K>>(); @SuppressWarnings("unchecked") public V put(K key, V value) { if (map.size() > max_size) { Node<K> firstKey = (Node<K>) tSet.poll(); map.remove(firstKey.getKey()); } tSet.add(new Node(key, 1)); return map.put(key, value); } public V get(Object key) { V result = map.get(key); incHit(key); return result; } private void incHit(Object key) { for (Object item : tSet) { if (((Node) item).key == key) { ((Node) item).setCount(((Node) item).getCount() + 1); break; } } } @Override public String toString() { return map.toString(); } public static void main(String[] args) { LFUHashMap<Integer, String> lfu = new LFUHashMap<Integer, String>(); for (int i = 0; i < 100; i++) { lfu.put(i, String.valueOf(i) + "_data"); if (i > 5) { lfu.get(1); lfu.get(2); lfu.get(3); lfu.get(4); } if (i > 10) { lfu.get(9); } } while (lfu.tSet.peek() != null) { System.out.println(lfu.tSet.poll()); } System.out.println(lfu); } private static class Node<K> implements Comparable<Node<K>> { private K key; private int count; public Node(K key, int count) { this.key = key; this.count = count; } public K getKey() { return key; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } @Override public String toString() { return "Node [key=" + key + ", count=" + count + "]"; } @Override public int compareTo(Node<K> o) { int diff = this.count - o.count; return diff != 0 ? diff : -((Integer) o.key).compareTo((Integer) this.key); } } }
FIFO:
仿照LinkedHashMap,通过LinkedList 就可以实现FIFO的元素排队
相关推荐
共四种:FIFO\LRU\LFU\OPT 。在VC环境下运行完全成功。 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储...
操作系统课设 分页式存储管理(内含OPT,FIFO,LRU,LFU四种算法,用到了线程),用eclipse打开,我给的是创建的整个源包,打开就可以运行,这个是经过最佳改正过的
基于C语言的FIFO和LRU算法的实现。
页面置换算法(FIFO算法_LRU算法).doc
FIFO,LRU,LFU页面置换算法模拟程序.zip
实现了操作系统中的FIFO,LRU,LFU页面置换算法,能够动态输入物理块以及页面数,得出每一步的置换步骤以及置换率,简单有效。
操作系统页面置换算法模拟实现,fifo、lfu、lru、opt,界面由MFC实现
对比FIFO/LRU两种算法的命中率。有源程序,有结果,有对比说明,有测试用例。
这是一个自己完成软件工程的操作系统课程课程设计题目:此程序用于模拟虚拟磁盘页面置换算法,实现了FIFO页面置换算法和LRU页面置换算法,获得课程设计优秀的好成绩
最近最少用置换算法(LRU).doc
LRU算法LRU算法LRU算法LRU算法
该工程具体是在codeblock上面实现了操作系统课程上讲解的页面置换算法,包括先进先出(FIFO)、最佳置换算法(OPT)、最久最近未使用算法(LRU)。 具体实现功能有: 1、建立相应的数据结构 2、在屏幕上显示页面...
操作系统中的Cache与内存间的置换算法有LRU,FIFO等经典算法,作者首先程序实现了此2种算法,并在此2者的基础上创新出一个新的置换算法LRU_FIFO算法,获得高校教师很高评价,该算法结合LRU与FIFO的特点,也可单独...
OS操作系统上机题 FIFO,LRU,LFU 的三种页面置换算法的C++实现 {3,2,1,3,2,5,2,3,6,2,1,4,2} 为本实验例子的页面走向 copy直接可运行 提供简单可视化菜单 三种页面置换算法可供选择 注释详细,初学者亦可看懂
图形化模拟内存中的FIFO,LRU,LFU存储管理,基于python实现
LRU算法和FIFO算法合体
带有界面的算法,视自己需求下载。 主界面选择使用三种算法的一个。在创建中输入页面数,随机生成页面。在指定物理块中实现置换。点击查看将置换的过程显示出来。
fifo&lru;页面置换算法c++实现,从trace.txt文档中读入置换页面序号
操作系统页面置换-最近最少使用(LRU)算法模拟.doc.doc
(1)输入一个逻辑页面访问序列和随机产生逻辑页面访问序列,由四个线程同时完成每个算法; (2)能够设定驻留内存页面的个数、内存的存取时间、缺页中断的时间、快表的时间,并可以暂停和继续系统的执行; (3)...