SoftReference Cache

Mit dem Java SoftReference-Cache kann man Objekte zwischenspeichern. Diese werden in das Memory geladen und sind solange vorhanden, bis diese vom Garbage Collector wieder aufgeräumt werden.

Dies kann man z.B. machen wenn man in seiner Applikation immer wieder Bilder (z.B. Profilbilder) anzeigen will, welche man aus dem Internet streamen muss. Diese können somit einmal geladen werden und dann zwischengespeichert werden.

SoftReference ref = new SoftReference<Object>(new Object());

Damit mehrere Objekte gespeichert werden können, speichere ich die einzelnen Objekte in einer Hashmap. Damit von der ganzen Applikation zugegriffen wird die Klasse mit einem Singleton Pattern erstellt. Folgende Klasse kann somit generisch eingesetzt werden.

SoftRefCache.java
package ch.aquasonic.example;
 
import java.lang.ref.SoftReference;
import java.util.HashMap;
 
/**
 * Class stores any objects as SoftReference in a HashMap.
 * 
 * @author aquasonic
 * @version 1.0
 *
 */
public class SoftRefCache {
 
	/**
	 * Instance for the Singleton Pattern
	 */
	private static final SoftRefCache INSTANCE = new SoftRefCache();
 
	/**
	 * HashMap with the References
	 */
	private HashMap<String, SoftReference<Object>> cache = null;
 
	/**
	 * Constructor
	 */
	private SoftRefCache() {
		this.cache = new HashMap<String, SoftReference<Object>>();
	}
 
	/**
	 * Singleton pattern
	 * 
	 * @return {SoftRefCache} instance the class
	 */
	public static SoftRefCache getInstance() {
		return INSTANCE;
	}
 
	/**
	 * Put an object into the cache
	 * 
	 * @param key to identify the object
	 * @param obj the object to store in the cache
	 */
	public void put(String key, Object obj) {
		this.cache.put(key, new SoftReference<Object>(obj));
	}
 
	/**
	 * Get an object from the cache
	 * 
	 * @param key to identify the object
	 * @return {Object} the cached object, or null if not found
	 */
	public Object get(String key) {
		SoftReference<Object> ref = this.cache.get(key);
 
		if (ref == null) {
			return null;
		}
 
		Object value = ref.get();
		if (value == null) {
			this.cache.remove(key);
		}
 
		return value;
	}
}

Objekt in Cache speichern

Mit folgendem Aufruf kann ein Objekt im Cache zwischengespeichert werden:

SoftRefCache c = SoftRefCache.getInstance();
c.put("myObject", new Object());

Objekt aus Cache laden

Mit folgendem Befehl kann ein Objekt aus dem Cache geladen werden:

SoftRefCache c = SoftRefCache.getInstance();
Object myObject = c.get("myObject");
java/softreference.txt · Zuletzt geändert: 27.12.2013 19:46 (Externe Bearbeitung)
Nach oben
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0