SORU
26 Kasım 2009, PERŞEMBE


'In WeakHashMap ve önbellekleme Java: Neden anahtarları, değerleri başvuru değil mi?

Java WeakHashMap sık sık önbelleği için yararlı olarak kabul edilmektedir. Ama zayıf başvurular göster anahtarları açısından, kendi değerleri içinde tanımlanan tuhaf görünüyor. Önbellek kuvvetle onlara başvuran ayrıca, önbellek istiyorum, ve hiç kimse bir kez çöp toplama almak istiyorum hangi değerleri yani, değil mi?

Hangi şekilde anahtarlarını zayıf başvurular tutmaya yardımcı oluyor mu? Eğer sen bir ExpensiveObject o = weakHashMap.get("some_key"), sonra istediğim önbellek tutunacak bir 'o' kadar arayan yok tutun güçlü referans artık umrumda değil, iyi ya da dize nesne "some_key".

Bir şey mi kaçırdım?

CEVAP
26 Kasım 2009, PERŞEMBE


WeakHashMapdeğilbir önbellek olarak yararlı, çoğu insan bunu düşün en azından. Dediğiniz gibi, zayıf kullanıranahtarlarıdeğil , zayıfdeğerleryani çoğu insan, aslında, ettim. (ve kullanmak istediğim için tasarlanmış değil ^em>gördüminsanlar, yanlış) için bunu kullanın.

WeakHashMap kontrol edemezsin olan nesneler hakkında meta verileri tutmak için çoğunlukla yararlıdır. Örneğin, eğer bir sürü nesneler geçiyor sınıf ve takibini yapmak, ek veri hakkında onlarsız ihtiyacı için bildirilen giderler kapsam ve olmadan referans için onları tutmak onları hayatta.

Basit bir örnek (daha önce kullandım) gibi bir şey olabilir:

WeakHashMap<Thread, SomeMetaData>

nerede olabilir takip edin ne çeşitli konuları sistem yapıyorsun, iplik ölür, giriş silinecektir sessizce senin göster, sana değil konu olan çöp toplama eğer sen son başvuru. O zaman göster girdileri sisteminizde etkin iş parçacığı hakkında ne bulmak için üzerinde yineleme yapabilirsiniz.

Daha fazla bilgi için WeakHashMap in not a cache! bkz.

Önbellek türü için, özel cache sistemi (örneğin EHCache) kullanın veyagoogle-collections' MapMaker class; gibi bir şey bak ya

new MapMaker().weakValues().makeMap();

neyin peşinde olduğunuzu, ya da varsa ekleyebilirsiniz fantezi almak istiyorsanız yapacak son kullanma zamanlı:

new MapMaker().weakValues().expiration(5, TimeUnit.MINUTES).makeMap();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DJAndrewRyan

    DJAndrewRyan

    22 Ocak 2007
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • Attempts at least

    Attempts at

    1 Ocak 2007