23 Ocak 2019 Çarşamba

MapMaker Sınıfı

Giriş
Açıklaması şöyle. Şimdiki CacheBuilder yerine eskiden MapMaker kullanılırdır
All caching related methods on MapMaker have been deprecated in favor of similar methods in CacheBuilder, and are scheduled for upcoming deletion. (...)

Most MapMaker use cases should be migrated to either CacheBuilder or  AtomicLongMap. Specifically, cases when MapMaker is used to construct maps with AtomicLong values should generally be migrated to  AtomicLongMap. Other cases where MapMaker caching functionality is used (including all uses of MapMaker.makeComputingMap(Function)) should be migrated to CacheBuilder.
Bu sınıf eğer weakKeys() çağrısı yapılmamışsa altta bir ConcurrentHashMap yaratıyor. Yani aslında bu kullanımda çok faydalı değil. 

Ancak weakKeys() çağrısı yapıldıysa bence önemli bir boşluğu dolduruyor çünkü concurrent olan WeakHashMap + IdendityHashMap birleşimi bir sınıf döndürüyor.
Açıklaması şöyle
Java already supports WeakHashMap to use Weak References for the keys. But, there is no out-of-the-box solution to use the same for the values. Luckily, MapMaker provides simple builder methods to use WeakReference for both the keys and the values.
makeMap metodunun içi şöyle
public <K,V> ConcurrentMap<K,V> makeMap (){
  if(!useCustomMap) {
    return new ConcurrentHashMap<>(getInitialCapacity(), 0.75f, getConcurrencyLevel());
  }
  return MapMakerInternalMap.create(this);
}
concurrencyLevel metodu
Örnek
Şöyle yaparız
 ConcurrentMap<Request, Stopwatch> timers = new MapMaker()
       .concurrencyLevel(4)
       .weakKeys()
       .makeMap();
initialCapacity metodu
Örnek
Şöyle yaparız
ConcurrentMap<User, Session> sessionCache = new MapMaker().initialCapacity(100).makeMap();
mapMap metodu
Örnek
Şöyle yaparız
ConcurrentMap<User, Session> sessionCache = new MapMaker().makeMap();
weakKeys metodu
Açıklaması şöyle. Yani equals() + hashCode() yerine == kontrolü yapılıyor.
If we enable weak references, then MapMaker creates a custom map represented by a set of hash tables internally. It also shares similar performance characteristics as a ConcurrentHashMap.

However, an important difference with WeakHashMap is that the equality checks happen via the identity (== and identityHashCode) comparisons.
Örnek
Şöyle yaparız
ConcurrentMap<User, Session> sessionCache = new MapMaker().weakKeys().makeMap();

Hiç yorum yok:

Yorum Gönder