1 8 package org.ozoneDB.core.storage; 9 10 import java.lang.ref.ReferenceQueue ; 11 import java.lang.ref.WeakReference ; 12 import java.util.Properties ; 13 14 21 public class WeakReferenceCache extends AbstractReferenceCache { 22 23 private static class ObjectReference extends WeakReference implements KeyedReference { 24 25 28 private Object key; 29 30 ObjectReference(Object key, Object value, ReferenceQueue q) { 31 super(value, q); 32 this.key = key; 33 } 34 35 public Object getKey() { 36 return key; 37 } 38 39 public String toString() { 40 return key.toString(); 41 } 42 43 public int hashCode() { 44 return key.hashCode(); 45 } 46 47 public boolean equals(Object o) { 48 if (!(o instanceof ObjectReference)) { 49 return false; 50 } else { 51 ObjectReference otherRef = (ObjectReference) o; 52 return otherRef.getKey().equals(getKey()); 53 } 54 } 55 56 } 58 public WeakReferenceCache(Properties properties, String prefix) { 59 super(properties, prefix); 60 } 61 62 protected KeyedReference createKeyedReference(Object key, Object value, ReferenceQueue referenceQueue) { 63 return new ObjectReference(key, value, referenceQueue); 64 } 65 66 68 69 public WeakReferenceCache() { 70 } 71 72 private static class Item { 73 74 public Object key; 75 public byte[] filling = new byte[1000]; 76 77 Item(Object key) { 78 this.key = key; 79 } 80 81 public String toString() { 82 return key.toString(); 83 } 84 } 85 86 public static void main(String args[]) { 87 WeakReferenceCache cache = new WeakReferenceCache(); 88 int last = 0; 89 for (int i = 0; i < 1000000; i++) { 90 Object key = new Integer (i); 91 Item item = new Item(key); 92 cache.put(key, item); 93 if (cache.size() < last) { 97 System.out.println(cache.size() + ", last: " + last); 98 } 99 last = cache.size(); 100 101 } 102 System.out.println("completed successfully"); 103 } 104 105 } 106 | Popular Tags |