01: /**********************************************************************
02: Copyright (c) 2002 Mike Martin (TJDO) and others. All rights reserved.
03: Licensed under the Apache License, Version 2.0 (the "License");
04: you may not use this file except in compliance with the License.
05: You may obtain a copy of the License at
06:
07: http://www.apache.org/licenses/LICENSE-2.0
08:
09: Unless required by applicable law or agreed to in writing, software
10: distributed under the License is distributed on an "AS IS" BASIS,
11: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12: See the License for the specific language governing permissions and
13: limitations under the License.
14:
15:
16: Contributors:
17: 2002 Kelly Grizzle (TJDO)
18: 2003 Andy Jefferson - coding standards
19: ...
20: **********************************************************************/package org.jpox.util;
21:
22: import java.lang.ref.ReferenceQueue;
23: import java.lang.ref.SoftReference;
24: import java.util.Map;
25:
26: /**
27: * A <code>java.util.Map</code> implementation with soft values.
28: *
29: * <P> The values are stored as soft references. If map entry value object
30: * is not actively being used, i.e. no other object has a strong reference
31: * to it, it may become garbage collected at the discretion of the garbage
32: * collector (typically if the VM is low on memory). If this happens, the
33: * entry in the <code>SoftValueMap</code> corresponding to the value object
34: * will also be removed.
35: *
36: * @see SoftReference
37: * @version $Revision: 1.2 $
38: */
39: public class SoftValueMap extends ReferenceValueMap {
40: /**
41: * Default Constructor
42: **/
43: public SoftValueMap() {
44: super ();
45: }
46:
47: /**
48: * Constructor taking the initial capacity.
49: * @param initialCapacity The Initial capacity of the collection
50: **/
51: public SoftValueMap(int initialCapacity) {
52: super (initialCapacity);
53: }
54:
55: /**
56: * Constructor taking the initial capacity and load factor.
57: * @param initialCapacity The Initial capacity of the collection
58: * @param loadFactor The Load Factor of the collection
59: **/
60: public SoftValueMap(int initialCapacity, float loadFactor) {
61: super (initialCapacity, loadFactor);
62: }
63:
64: /**
65: * Constructor taking a Map for definition.
66: * @param m The Map
67: **/
68: public SoftValueMap(Map m) {
69: super (m);
70: }
71:
72: /**
73: * Representation of a soft value reference.
74: **/
75: private static class SoftValueReference extends SoftReference
76: implements ReferenceValueMap.ValueReference {
77: private final Object key;
78:
79: SoftValueReference(Object key, Object value, ReferenceQueue q) {
80: super (value, q);
81: this .key = key;
82: }
83:
84: public Object getKey() {
85: return key;
86: }
87: }
88:
89: protected ReferenceValueMap.ValueReference newValueReference(
90: Object key, Object value, ReferenceQueue queue) {
91: return new SoftValueReference(key, value, queue);
92: }
93: }
|