miembro del equipo de Guava aquí.
La implementación de Guava Cache
expira las entradas en el curso de las operaciones de mantenimiento normales, que se producen por segmentos durante las operaciones de escritura en caché y, ocasionalmente, durante las operaciones de lectura de caché. Las entradas generalmente no caducan en exactamente su tiempo de caducidad, simplemente porque Cache
toma la decisión deliberada de no crear su propio hilo de mantenimiento, sino que permite al usuario decidir si se requiere mantenimiento continuo.
Me voy a centrar en expireAfterAccess
, pero el procedimiento para expireAfterWrite
es casi idéntico. En términos mecánicos, cuando especifica expireAfterAccess
en el CacheBuilder
, cada segmento del caché mantiene una cola de acceso a la lista enlazada para las entradas en orden desde el acceso menos reciente al acceso más reciente. Las entradas de caché son en realidad ellos mismos nodos en la lista vinculada, de modo que cuando se accede a una entrada, se elimina de su posición anterior en la cola de acceso y se mueve al final de la cola.
Cuando se realiza el mantenimiento de la caché, todo lo que la caché debe hacer es caducar cada entrada en la parte delantera de la cola hasta que encuentre una entrada no vencida. Esto es sencillo y requiere una sobrecarga relativamente baja, y ocurre durante el mantenimiento normal de la memoria caché. (Además, el caché limita deliberadamente la cantidad de trabajo realizado en una única limpieza, lo que minimiza el gasto de cualquier operación de caché única). Por lo general, el costo del mantenimiento del caché está dominado por el costo de calcular las entradas reales en el caché.
+1 ... Muchas gracias por la explicación y muchas gracias por Guava. ¡La lista vinculada "truco" es muy clara! Estoy instalando Guava de inmediato: gracias a su respuesta detallada, ahora me venden en Guava:) –
Charles Fry hizo una excelente presentación en MapMaker/CacheBuilder en Strange Loop. La charla está disponible [en InfoQ] (http://www.infoq.com/presentations/Concurrent-Caching-at-Google) –
¿Usaría una estructura de datos distinta de LinkedList de alguna manera ayudaría a mejorar el proceso de desalojo? – asgs