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

LRU缓存算法实现

阅读更多
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache {
	private long lookups;
	private long hits;
	private long inserts;
	private long evictions;

	private Map map;

	public void init(int initialSize, final int limitSize) {

		map = new LinkedHashMap(initialSize, 0.75f, true) {
			protected boolean removeEldestEntry(Map.Entry eldest) {
				if (size() > limitSize) {
					evictions++;
					return true;
				}
				return false;
			}
		};

	}

	public int size() {
		synchronized (map) {
			return map.size();
		}
	}

	public Object put(Object key, Object value) {
		synchronized (map) {
			inserts++;
			return map.put(key, value);
		}
	}

	public Object get(Object key) {
		synchronized (map) {
			Object val = map.get(key);
			lookups++;
			if (val != null) {
				hits++;
			}
			return val;
		}
	}

	public void clear() {
		synchronized (map) {
			map.clear();
		}
	}


	private static String calcHitRatio(long lookups, long hits) {
	    if (lookups==0) return "0.00";
	    if (lookups==hits) return "1.00";
	    int hundredths = (int)(hits*100/lookups);   // rounded down
	    if (hundredths < 10) return "0.0" + hundredths;
	    return "0." + hundredths;
	}
	
	public Map getStatistics(){
	    Map statMap = new HashMap();
	    synchronized (map) {
	      statMap.put("lookups", lookups);
	      statMap.put("hits", hits);
	      statMap.put("hitratio", calcHitRatio(lookups,hits));
	      statMap.put("inserts", inserts);
	      statMap.put("evictions", evictions);
	      statMap.put("size", map.size());
	    }
	    return statMap;
	}
}

相关参考:http://dennis-zane.iteye.com/blog/128278
1
0
分享到:
评论

相关推荐

    LRU算法LRU算法LRU算法LRU算法

    在缓存或者数据库管理系统中,LRU算法被广泛应用,因为它的实现简单且效果良好。 LRU算法的核心思想是:当内存满时,最近最少使用的数据会被优先淘汰。也就是说,如果一个数据最近被访问过,那么它在未来被访问的...

    c语言实现的LRU算法

    `lru.h`可能包含了LRU缓存的接口声明,如`init_lru()`, `add_to_lru()`, `get_from_lru()`, `remove_lru()`等函数,它们分别用于初始化LRU缓存、添加元素、获取元素和根据LRU策略移除元素。 `makefile`是构建项目的...

    Java实现简单LRU缓存算法

    这里的LRUCache类维护了一个双向链表和一个哈希表,用于实现LRU算法。具体实现细节如下: - get方法:首先在哈希表中查找对应的键值对,如果不存在,则返回-1;如果存在,则将对应的节点从双向链表中删除,并将其...

    链表(上):如何实现LRU缓存淘汰算法.pdf

    ### 链表在LRU缓存淘汰算法中的应用...通过上述方法,双向链表成为了实现LRU缓存淘汰算法的理想选择。它不仅提供了高效的插入和删除操作,还能确保数据项的访问顺序符合最近最少使用的策略,从而提高了缓存的整体性能。

    python-LRU缓存.zip

    Python开发者:对于想要了解或实现LRU缓存算法的Python开发者来说,这个资源是一个很好的学习资料。 数据结构和算法爱好者:LRU缓存算法是数据结构和算法领域的一个经典问题,对于喜欢挑战和学习数据结构和算法的人...

    LRU缓存算法

    LRU算法是常用的缓存替代算法,文档中告诉我们如何实现LRU算法

    缓存淘汰算法之LRU

    2. LRU 算法实现 LRU 算法的实现最常见的是使用一个链表保存缓存数据。详细算法实现如下: 1. 新数据插入到链表头部; 2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 3. 当链表满的时候,将链表...

    Java实现LRU算法.zip

    通过以上代码,我们已经构建了一个简单的LRU缓存系统。在实际应用中,LRU算法不仅可以用于操作系统中的页面替换,还可以应用于数据库查询缓存、编程语言的内存管理(如Java的SoftReference和WeakReference)以及Web...

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

    实验内容包括实现LRU算法的两种不同变体:计数器实现和栈实现。在计数器实现中,每个页面都有一个访问计数器,每当页面被访问时,计数器增加,淘汰时选择计数最小的页面。而在栈实现中,页面按访问顺序存储在栈中,...

    LRU算法 java实现

    在Java中,我们可以使用数据结构如HashMap和LinkedList来实现LRU缓存。 首先,我们需要一个双向链表来保存缓存中的元素,链表的节点包含元素的键值对以及前后节点的引用。链表的顺序反映了元素的使用情况,最近使用...

    C++实现的LRU缓存算法(带定期/不定期过期时间)

    本算法为 C++ 实现的 LRU 缓存算法,包含普通 LRU、定时过期的 LRU、不定时过期的LRU,数据结构为双向链表及哈希表结合的方式,实现了 get() 和 put() 两个操作,且所有操作的平均时间复杂度均可以控制在 O(1) 内。

    LRU算法 C++实现

    LRU算法的实现通常依赖于数据结构,如哈希表和双向链表。在C++中,我们可以使用`std::unordered_map`来存储页面及其访问时间,同时使用`std::list`来维护页面的顺序。以下是一个简单的C++实现概述: ```cpp #...

    lru算法C语言实现

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

    lrucacheleetcode-LRU_Cache_Algorithm:用C++实现LRU缓存算法

    (LRU缓存算法) C++版本,适用于 ##LRU算法介绍 引自: Discards the least recently used items first. This algorithm requires keeping track of what was used when, which is expensive if one wants to make ...

    06丨链表(上):如何实现LRU缓存淘汰算法?1

    今天我们将讨论如何使用链表来实现LRU缓存淘汰算法。 首先,让我们来讨论缓存的概念。缓存是一种提高数据读取性能的技术,它广泛应用于CPU缓存、数据库缓存、浏览器缓存等领域。当缓存被用满时,需要淘汰一些数据以...

    一个LRU算法的实现

    在操作系统、数据库管理系统和缓存系统等领域,LRU算法都有广泛的应用。在这个实验设计课程中,我们将探讨LRU算法的原理和实现。 首先,我们需要理解LRU算法的核心思想。假设有一个固定大小的缓存(或内存),当新...

    实现了LRU算法的缓存

    在这个Java实现的LRU缓存中,我们可能会看到以下几个关键知识点: 1. **数据结构的选择**: LRU缓存通常基于哈希表和双向链表实现。哈希表用于快速查找,而双向链表则用来维护元素的顺序性,以便于执行删除和插入...

    LRU算法实现LRU算法实现LRU算法实现LRU算法实现LRU算法实现

    LRU算法实现 LRU(Least Recently Used)算法是一种常用的缓存淘汰算法,目标是在缓存中选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来经历的时间T,当须...

    js实现操作系统LRU置换算法

    以下是一个简单的LRU缓存类实现示例: ```javascript class LRUCache { constructor(capacity) { this.capacity = capacity; this.cache = new Map(); this.head = null; this.tail = null; } get(key) { ...

    LRU算法 lru算法

    在给定的描述中提到了"1.cpp"和"1.exe",这可能是在描述LRU算法实现的过程。".cpp"文件通常是C++编程语言的源代码文件,可能包含了LRU算法的实现代码。而".exe"文件则是编译后的可执行程序,可能是运行这个LRU算法的...

Global site tag (gtag.js) - Google Analytics