Save This Page
Home » openjdk-7 » sun » misc » [javadoc | source]
sun.misc
public class: SoftCache [javadoc | source]
java.lang.Object
   java.util.AbstractMap
      sun.misc.SoftCache

All Implemented Interfaces:
    Map

A memory-sensitive implementation of the Map interface.

A SoftCache object uses soft references to implement a memory-sensitive hash map. If the garbage collector determines at a certain point in time that a value object in a SoftCache entry is no longer strongly reachable, then it may remove that entry in order to release the memory occupied by the value object. All SoftCache objects are guaranteed to be completely cleared before the virtual machine will throw an OutOfMemoryError. Because of this automatic clearing feature, the behavior of this class is somewhat different from that of other Map implementations.

Both null values and the null key are supported. This class has the same performance characteristics as the HashMap class, and has the same efficiency parameters of initial capacity and load factor.

Like most collection classes, this class is not synchronized. A synchronized SoftCache may be constructed using the Collections.synchronizedMap method.

In typical usage this class will be subclassed and the fill method will be overridden. When the get method is invoked on a key for which there is no mapping in the cache, it will in turn invoke the fill method on that key in an attempt to construct a corresponding value. If the fill method returns such a value then the cache will be updated and the new value will be returned. Thus, for example, a simple URL-content cache can be constructed as follows:

    public class URLCache extends SoftCache {
        protected Object fill(Object key) {
            return ((URL)key).getContent();
        }
    }

The behavior of the SoftCache class depends in part upon the actions of the garbage collector, so several familiar (though not required) Map invariants do not hold for this class.

Because entries are removed from a SoftCache in response to dynamic advice from the garbage collector, a SoftCache may behave as though an unknown thread is silently removing entries. In particular, even if you synchronize on a SoftCache instance and invoke none of its mutator methods, it is possible for the size method to return smaller values over time, for the isEmpty method to return false and then true, for the containsKey method to return true and later false for a given key, for the get method to return a value for a given key but later return null, for the put method to return null and the remove method to return false for a key that previously appeared to be in the map, and for successive examinations of the key set, the value set, and the entry set to yield successively smaller numbers of elements.

Fields inherited from java.util.AbstractMap:
keySet,  values
Constructor:
 public SoftCache() 
 public SoftCache(int initialCapacity) 
 public SoftCache(int initialCapacity,
    float loadFactor) 
Method from sun.misc.SoftCache Summary:
clear,   containsKey,   entrySet,   fill,   get,   isEmpty,   put,   remove,   size
Methods from java.util.AbstractMap:
access$000,   clear,   clone,   containsKey,   containsValue,   entrySet,   equals,   get,   hashCode,   isEmpty,   keySet,   put,   putAll,   remove,   size,   toString,   values
Methods from java.lang.Object:
clone,   equals,   finalize,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from sun.misc.SoftCache Detail:
 public  void clear() 
    Remove all mappings from this cache.
 public boolean containsKey(Object key) 
    Return true if this cache contains a mapping for the specified key. If there is no mapping for the key, this method will not attempt to construct one by invoking the fill method.
 public Set entrySet() 
    Return a Set view of the mappings in this cache.
 protected Object fill(Object key) 
    Create a value object for the given key. This method is invoked by the get method when there is no entry for key. If this method returns a non-null value, then the cache will be updated to map key to that value, and that value will be returned by the get method.

    The default implementation of this method simply returns null for every key value. A subclass may override this method to provide more useful behavior.

 public Object get(Object key) 
    Return the value to which this cache maps the specified key. If the cache does not presently contain a value for this key, then invoke the fill method in an attempt to compute such a value. If that method returns a non-null value, then update the cache and return the new value. Otherwise, return null.

    Note that because this method may update the cache, it is considered a mutator and may cause ConcurrentModificationExceptions to be thrown if invoked while an iterator is in use.

 public boolean isEmpty() 
    Return true if this cache contains no key-value mappings.
 public Object put(Object key,
    Object value) 
    Update this cache so that the given key maps to the given value. If the cache previously contained a mapping for key then that mapping is replaced and the old value is returned.
 public Object remove(Object key) 
    Remove the mapping for the given key from this cache, if present.
 public int size() 
    Return the number of key-value mappings in this cache. The time required by this operation is linear in the size of the map.