| 1 19 20 package edu.umd.cs.findbugs.util; 21 22 import java.util.LinkedHashMap ; 23 import java.util.Map ; 24 25 import org.apache.bcel.classfile.JavaClass; 26 27 34 public class MapCache<K,V> extends LinkedHashMap <K,V> { 35 private static final long serialVersionUID = 0L; 36 int maxCapacity; 37 41 public MapCache(int maxCapacity) { 42 super(16, 0.75f, true); 43 this.maxCapacity = maxCapacity; 44 count = new int[maxCapacity]; 45 } 46 int [] count; 47 @Override  48 public V get(Object k) { 49 if (false) { 50 int age = count.length-1; 51 for(Map.Entry <K,V> e : entrySet()) { 52 if (e.getKey().equals(k)) { 53 count[age]++; 54 if (false && age > 20 && k instanceof JavaClass) { 55 56 System.out.println("Reusing value from " + age + " steps ago "); 57 System.out.println("Class " + ((JavaClass)k).getClassName()); 58 new RuntimeException ().printStackTrace(System.out); 59 } 60 break; 61 } 62 age--; 63 64 } 65 } 66 return super.get(k); 67 } 68 @Override  69 protected boolean removeEldestEntry(Map.Entry <K,V> eldest) { 70 boolean result = size() > maxCapacity; 71 if (false && result && eldest.getKey() instanceof JavaClass) 72 System.out.println("Dropping " + ((JavaClass)eldest.getKey()).getClassName()); 73 return result; 74 } 75 76 public String getStatistics() { 77 StringBuffer b = new StringBuffer (); 78 for(int c : count) 79 b.append(c).append(" "); 80 return b.toString(); 81 } 82 83 } 84 | Popular Tags |