标签:
简介:LRU(Least Recently Used)最近最少使用页面置换算法,一种内存缓存机制。内部底层可以使用数组实现。因为手机分配给每一个程序的大小是固定的。
为什么要用:程序的运行所需的内存空间超过手机分配的空间时,就会发生oom(out of menory)。所以会有一些保持内存大小的机制,LRU就是其中一个。
原理:本例中是用ArrayList模拟固定的内存空间(当然可能不是很合适,如果有更好的建议可以提出来切磋切磋)。测试数据为:2、3、6、3、5、4、1、4
LRU顾名思义,就是先找到最近最少使用的资源,然后当空间不足时,就将其删掉。使用上面的测试数据,假设固定空间为5。存储前面三个数据(内存存储情况:2、3、6)直接存储,到第四个数据(3)时,3是最新数据,所以,数组的存储会变成(内存存储情况:2,、6、3),但存储到第六个数据时(2、3、6、3、5、4)内存固有空间刚好存满(内存存储情况:2、6、3、5、4)。当再存入第七个数据(1)时,因为内存空间已经满了所以要删除最少使用的数据2.此时内存情况为(内存存储情况:6、3、5、4、1)
具体实现请看代码:
import java.util.ArrayList; //LRU(Least Recently Used)算法 public class LRU { public static final int MAX_MEMORY=5; // 假设这是存放资源,固定大小的一片空间 ArrayList<Resourse> resoursesList=new ArrayList<LRU.Resourse>(); public static void main(String[] args) { ArrayList<Resourse> list=new ArrayList<LRU.Resourse>(); for(int i=0;i<10;i++){ list.add(new Resourse(i)); } LRU lru=new LRU(); lru.put(list.get(2)); lru.put(list.get(3)); lru.put(list.get(6)); lru.put(list.get(3)); lru.put(list.get(5)); lru.put(list.get(4)); lru.put(list.get(1)); lru.put(list.get(4)); } // 是否已经是满了 public boolean isMax(){ if(getSize()>=MAX_MEMORY){ return true; }else { return false; } } public int getSize(){ return resoursesList.size(); } /** * * @param res 需要添加的元素 * @return 返回删除的元素,如果没有删除元素则不会有返回值 */ public Resourse put(Resourse res){ /* * 1)判断是否有包含需要添加的元素 * 2)如果有包含删除原来的元素,直接在List后面添加,作为最新使用的元素 * 3)如果没有包含,分两种情况, * 一、空间已经满了,删除第一个元素,再添加 * 二、空间未满,空间未满直接添加 */ Resourse del=null; if(resoursesList.contains(res)){ resoursesList.remove(res); resoursesList.add(res); }else{ if(isMax()){ del=resoursesList.remove(0); resoursesList.add(res); }else { resoursesList.add(res); } } print(); return del; } //打印数据 public void print(){ for (Resourse res : resoursesList) { System.out.print(res.value+" "); } System.out.println(); } // 需要存储的资源类 private static class Resourse{ private int value; public Resourse(int value) { super(); this.value = value; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } } }
程序运行结果:
标签:
原文地址:http://www.cnblogs.com/flyfirst/p/4422092.html