Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Keširanje sa SoftReference

[es] :: Java :: Keširanje sa SoftReference

[ Pregleda: 1312 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko Medojević
Team leader
Digital ST
Beograd

Član broj: 93659
Poruke: 776
*.adsl-3.sezampro.yu.

Sajt: www.digitalst.rs


+99 Profil

icon Keširanje sa SoftReference07.12.2010. u 21:36 - pre 162 meseci
Ćao.

Pokušavam da napravim prostu cache klasu za Android koja će mi omogućiti keširanje bez opasnosti da uletim u out of memory.

Napisao sam nešto ovako:
Code:
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Map;

public class MemoryCache {
       // singleton implemtation
       private static MemoryCache instance = null;
       private MemoryCache() { }
       public static MemoryCache getInstance() {
          if(instance == null) {
             instance = new MemoryCache();
          }
          return instance;
       }
       // 
       
       private Map<String, SoftReference<Object>> cachedItems = new HashMap<String, SoftReference<Object>>();
       
       public void saveCacheItem(String itemId, Object objForCache) {
           cachedItems.put(itemId, new SoftReference<Object>(objForCache));
       }
       
       public Object getCacheItem(String itemId) {
           if(cacheItemExists(itemId)) {
               return cachedItems.get(itemId).get();
           }
           else {
               return null;
           }
       }
       
       public Boolean cacheItemExists(String itemId) {
           if(cachedItems.containsKey(itemId)) {
               if(cachedItems.get(itemId) != null ) {
                   return true;
               }
           }
           return false;
       }
       
       public void deleteCacheItem(String itemId) { 
           if(cachedItems.containsKey(itemId)) {
               cachedItems.remove(itemId);
           }
       }
}


Međutim, dešava se sledeće. Iako je u pitanju objekat od svega nekoliko polja sa geterima i seterima, on biva jako brzo GC-ovan.
Koliko sam razumeo SoftReference bi trebale da odlažu brisanje objekata iz memorije sve dok ne preti out of memory.

Tesitiranje sam izvršio na Android emulatori, pa ne znam da li u tome može biti problem ili možda radim nešto pogrešno.
 
Odgovor na temu

iMac
Kraljica Mamba
Software Developer
Beograd

Član broj: 271371
Poruke: 23
*.dynamic.sbb.rs.



+1 Profil

icon Re: Keširanje sa SoftReference07.12.2010. u 22:48 - pre 162 meseci
Mislim da, ukoliko ti niko iz ostalih delova programa ne koristi entry-je mape, GC skapira da mora da ih ukloni, bez obzira da li imas "pretnju" od memory leak-a ili ne. Mislim da je to razlog zasto ih GC brzo pokupi.
 
Odgovor na temu

[es] :: Java :: Keširanje sa SoftReference

[ Pregleda: 1312 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.