2011-09-01 1 views
2

Je voudrais savoir s'il existe actuellement un moyen avec Guava MapMaker ou avec CacheBuilder, pour fournir une fonction permettant de calculer si le cache est dans la taille maximale?Calcul de la taille du cache personnalisé avec Guava CacheBuilder/MapMaker

Il semble que l'expulsion est basée simplement sur le nombre d'éléments dans le cache comparé à la valeur .maximumSize(), mais je souhaite utiliser la carte résultante comme cache pour les bitmaps qui peuvent contenir de très petits ou très grandes entrées. Par conséquent, je voudrais être en mesure de fournir une fonction qui calcule la taille du cache en fonction de la quantité d'entrées de mémoire utilisées, puis permet au cache d'expulser sur la base de cela.

Répondre

5

Nous avons actuellement seulement maximumSize(int), mais sont évaluer la nécessité d'maximumWeight(int, Weigher<K, V>) (où ce type a juste une méthode weigh(K, V) retour int ou double). C'est toujours à vous de déterminer ce que le poids devrait être.

Bien sûr, cette fonctionnalité n'apparaîtra pas du jour au lendemain.

+1

On dirait exactement ce dont j'ai besoin, considérez ceci comme un vote pour cette fonctionnalité –

3

Il semble à partir des JavaDocs pour CacheBuilder qu'il n'existe aucun moyen de spécifier l'utilisation maximale de la mémoire pour la classe CacheBuilder ni la classe MapMaker. Vous ne pouvez définir que le nombre maximal d'éléments.

Les frameworks de cache tels que EhCache vous permettent de spécifier la taille maxium du tas (et/ou de l'espace disque) à utiliser par le cache. Dans EhCache, vous pouvez utiliser les méthodes maxBytesLocalHeap et/ou maxBytesLocalDisk pour spécifier ce type de comportement. Consultez les JavaDocs pour CacheConfiguration pour plus d'informations.

Questions connexes