2012-04-19 9 views
7

Ho provato la cache di guava di recente e sono rimasto sorpreso dalla politica di sfratto. Anche se la cache è chiaramente indicata come un lru nei documenti, ma non è de facto. Per me gli sfratti sembrano casuali come mostra il mio test. (il test è di aggiungere 100 etnie, ottenere 100 voci, potare 100 voci diverse, controllare l'ordine di sfratto) Non vorrei rilevare alcuni sfratti inaspettati in runtime. Potresti fornire qualche informazione sulla politica di sfratto per una cache di dimensioni limitate. Come posso forzare la rimozione della cache di guava come fa LHM?Politica di sfratto della cache di Guava

risposta

18

Le cache di guava sono segmentate in concurrencyLevel tabelle hash diverse per consentire più letture e scritture simultanee. L'impostazione predefinita è concurrencyLevel 4. In sostanza, se il vostro maximumSize è impostato su 100, poi che in realtà solo i risultati in ognuno dei quattro segmenti ottenendo un maximumSize di 25. Questo è il motivo per cui gli stati maximumSize documentazione:

notare che il la cache può sfrattare una voce prima che questo limite venga superato. Man mano che la dimensione della cache si avvicina al massimo, la cache elude le voci che hanno meno probabilità di essere riutilizzate.

Quindi se per caso c'erano 30 voci inserite in un segmento particolare, 5 di queste voci verranno espulse.

L'unico modo per ottenere lo sfratto globale di cui è stato effettuato il minimo accesso per uno Cache è disattivare completamente la concorrenza impostando concurrencyLevel(1). Anche in questo caso, la documentazione non produce nessuna garanzia sull'ordine di sfratto degli elementi e non si deve dipendere da esso.

+0

Grazie per la risposta Louis. Per me non è chiaro come trattare questa dichiarazione della documentazione. Quindi, meno concurrencyLevel = più LRU. Ma mi sono ancora confuso con lo sfratto a livello di segmento. ho ragione se un segmento diventa pieno diciamo> 25 (100/4) nel mio caso, lo sfratto inizierà? o sfrutterà solo a ~ maxSize ma sfrutterà un segmento lru entry di livello? –

+0

Se un segmento supera 25 voci, sfrutta la voce meno recente _ in quel segmento._ –

+0

(in sostanza, ogni segmento opera in modo più o meno completamente indipendente, in modo che possano essere utilizzati contemporaneamente senza bloccarsi.) –

Problemi correlati