1 package org.varienaja.util;
2
3 import java.util.LinkedHashMap;
4 import java.util.Map;
5
6 import org.apache.log4j.Logger;
7
8
9
10
11
12
13 public class LRUMap<K,V> extends LinkedHashMap<K,V> {
14 private static final Logger log = Logger.getLogger(LRUMap.class);
15
16 private static final long serialVersionUID = 200808182210L;
17 private int _max_entries;
18 private int _hits;
19 private int _misses;
20 private String _name;
21
22
23
24
25
26
27 public LRUMap(String name, int max_entries) {
28 super(max_entries, 0.75f, true);
29 _name = name;
30 _hits = 0;
31 _misses = 0;
32 _max_entries = max_entries;
33 }
34
35
36
37
38
39
40 @Override
41 public V get(Object key) {
42 V v = super.get(key);
43
44 if (v==null) {
45 _misses++;
46 } else {
47 _hits++;
48 }
49
50 if ((_hits+_misses) % 100 ==0) {
51 log.debug("LRUMap ("+_name+") size: "+size()+" Hits: " +_hits+ " Misses: "+ _misses + " hitrate: " + getHitrate());
52 }
53
54 return v;
55 }
56
57
58
59
60
61 protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
62 return size() > _max_entries;
63 }
64
65 private String getHitrate() {
66 return 100*_hits / (_hits + _misses) + "%";
67 }
68 }