java实现fifo算法_先进先出缓存算法(FIFO)--java实现

该博客介绍了如何使用Java实现先进的先出(FIFO)缓存算法,用于虚拟内存管理系统。当缓存满时,会删除最早进入的页面以容纳新页面。博客提供了一个FIFO类,包含一个构造方法`countCacheMiss`,根据给定的最大缓存大小和页面请求数组计算缓存未命中次数。代码中使用HashMap存储页面及其在缓存中的时间,确保页面唯一,并实现了页面替换策略。
摘要由CSDN通过智能技术生成

题目

操作系统中的虚拟内存管理系统可采用先进先出算法的方式缓存。

当请求的内存页不在缓存中。且缓存已满时,应从缓存中删除保存时间最长的页面,

从而为请求页面腾出空间,如果缓存未满,可直接将请求页面添加到缓存中,

给定的页面最多只应在缓存中出现一次。

构造FIFO类的构造方法为countCacheMiss。

该方法输入包括一个整数max_cache_size,和一个页面请求数组page_requests,

要求方法返回缓存未命中数的总数。

思考

可以为每个页面设置一个变量来记录在缓存中的时长,题目又要求页面不重复,

考虑用HashMap的键值对处理,key表示缓存中页面编号,value表示时长。

对于每一个页面请求,先判断是不是存在于缓存,

若存在是则将缓存内所有页面时长+1;

否则,

若缓存

若达到max_cache_size则从缓存中去掉时长最大的那个,再添加当前请求页面至缓存。

代码

import java.util.HashMap;

import java.util.Map.Entry;

public class FIFOCache {

public static int FIFO(int maxize, int[] page_req) {

int count = 0;

HashMap pages = new HashMap();

for (int j = 0; j < page_req.length; j++) {

if (pages.containsKey(Integer.valueOf(page_req[j]))) {

System.out.println(Integer.valueOf(page_req[j]) + "命中缓存!");

// 若pages列表中有当前请求页面,就把列表时间加1;

for (Entry entry : pages.entrySet()) {

Integer value = entry.getValue();

entry.setValue(Integer.valueOf(value.intValue() + 1));

System.out.print(entry.getKey() + " 当前的保存时间:" + entry.getValue() + "\t");

}

System.out.println();

continue;

} else {

System.out.println(Integer.valueOf(page_req[j]) + "未命中缓存!");

// 如果缓存满了,则去除缓存中存在最久的页面

if (pages.size() == maxize) {

int max = 0;

int key = 0;

for (Entry entry1 : pages.entrySet()) {

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值