KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ozoneDB > core > storage > WeakReferenceCache


1 // You can redistribute this software and/or modify it under the terms of
2
// the Ozone Core License version 1 published by ozone-db.org.
3
//
4
// Copyright (C) 2003-@year@, Leo Mekenkamp. All rights reserved.
5
//
6
// $Id: WeakReferenceCache.java,v 1.3 2004/03/21 21:05:51 leomekenkamp Exp $
7

8 package org.ozoneDB.core.storage;
9
10 import java.lang.ref.ReferenceQueue JavaDoc;
11 import java.lang.ref.WeakReference JavaDoc;
12 import java.util.Properties JavaDoc;
13
14 /**
15  * <p>Caches objects which may be garbage collected at any time by the Java virtual
16  * machine garbage collector. Uses weak references to hold objects in memory.</p>
17  *
18  * @author <a HREF="mailto:leoATmekenkampD0Tcom">Leo Mekenkamp (mind the anti sp@m)</a>
19  * @version $Id: WeakReferenceCache.java,v 1.3 2004/03/21 21:05:51 leomekenkamp Exp $
20  */

21 public class WeakReferenceCache extends AbstractReferenceCache {
22     
23     private static class ObjectReference extends WeakReference JavaDoc implements KeyedReference {
24         
25         /**
26          * same key as the key passed in <code>put(key, value)</code>
27          */

28         private Object JavaDoc key;
29         
30         ObjectReference(Object JavaDoc key, Object JavaDoc value, ReferenceQueue JavaDoc q) {
31             super(value, q);
32             this.key = key;
33         }
34         
35         public Object JavaDoc getKey() {
36             return key;
37         }
38         
39         public String JavaDoc toString() {
40             return key.toString();
41         }
42         
43         public int hashCode() {
44             return key.hashCode();
45         }
46         
47         public boolean equals(Object JavaDoc 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     } // ObjectReference
57

58     public WeakReferenceCache(Properties JavaDoc properties, String JavaDoc prefix) {
59         super(properties, prefix);
60     }
61     
62     protected KeyedReference createKeyedReference(Object JavaDoc key, Object JavaDoc value, ReferenceQueue JavaDoc referenceQueue) {
63         return new ObjectReference(key, value, referenceQueue);
64     }
65     
66 // DEBUG AND BUGTEST CODE ONLY FOLLOWING; not needed for normal operation
67

68
69     public WeakReferenceCache() {
70     }
71     
72     private static class Item {
73         
74         public Object JavaDoc key;
75         public byte[] filling = new byte[1000];
76         
77         Item(Object JavaDoc key) {
78             this.key = key;
79         }
80         
81         public String JavaDoc toString() {
82             return key.toString();
83         }
84     }
85     
86     public static void main(String JavaDoc args[]) {
87         WeakReferenceCache cache = new WeakReferenceCache();
88         int last = 0;
89         for (int i = 0; i < 1000000; i++) {
90             Object JavaDoc key = new Integer JavaDoc(i);
91             Item item = new Item(key);
92             cache.put(key, item);
93 // for (int j = 0; j < 20; j++) {
94
// cache.get(new Integer(j));
95
// }
96
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