|
Java: управление ресурсамиВ JDK 1.2 для этих целей были добавлены несколько классов, самые интересные из них - WeakReference и SoftReference. Weak ("слабая") ссылка будет очищена, если на объект нет более "сильных" ссылок и объект попался под руку GC. Soft ("мягкая") ссылка будет очищена, если на объект нет обычных ссылок, и, к объекту не доступались по этой ссылке определённое время (эвристически рассчитываемое в зависимости от текущего окружения). Для кэширования лучше всего подходят ссылки типа Soft, т.к. в них учитывается частота обращения к объекту. Непосредственно пользоваться этими ссылками не очень удобно, лучше написать контейнер с их использованием. Вот, например реализация класса SoftHashtable: import java.lang.ref.SoftReference; import java.util.Hashtable; public class SoftHashtable extends Hashtable { public SoftHashtable() {} public Object put(Object key,Object obj) { SoftReference ref = (SoftReference)super.put(key,new SoftReference(obj)); if( ref==null ) return null; return ref.get(); } public Object get(Object key) { SoftReference ref = (SoftReference)super.get(key); if( ref==null ) return null; return ref.get(); } public Object remove(Object key) { SoftReference ref = (SoftReference)super.remove(key); if( ref==null ) return null; return ref.get(); } } Этот класс является неполным, при желании Вы можете перекрыть остальные методы Hashtable. С помощью этого класса Вы уже можете легко организовать свой кэш объектов: private static Hashtable objCache = new SoftHashtable(); public SuperObject getObject(String key) { SuperObject o = (SuperObject)objCache.get(key); if( o==null ) { o = loadObject(key); objCache.put(key,o); } return o; } Таким образом, если GC обнаружит, что памяти осталось мало, а в кэше болтаются объекты, к которым давно никто не обращался, он сможет их почистить. Другие статьи по теме: - возможности языка java- Java: русские буквы и не только... - Java-приложение: заглянем внутрь - Java: управление ресурсами - почтовая программа - своими руками! |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |