El problema principal con una memoria caché grande es el tiempo total de la GC. Para hacerte una idea, podría ser de 1 segundo por GB (Esto varía de una aplicación a otra). Si tienes un caché de 20 GB y tu aplicación hace una pausa de 20 segundos cada cierto tiempo ¿es aceptable?
Como fanático de los archivos directos y de los mapas de memoria, tiendo a pensar en términos de cuándo los dos no pondría los datos en un montón, y simplemente usaría el montón para simplificar. ;) Los archivos mapeados en memoria no tienen impacto en el tiempo total del GC, independientemente del tamaño.
Una de las ventajas de utilizar un archivo mapeado de memoria es que puede ser mucho más grande que su memoria física y aun así funcionar razonablemente bien. Esto deja el sistema operativo para determinar qué partes deben estar en la memoria y qué debe enjuagarse en el disco.
BTW: Tener un SSD más rápido también ayuda;) Las unidades más grandes también tienden a ser más rápidas también. Verifique los IOP que pueden realizar.
En este ejemplo, creo una memoria de 8 TB mapeada en una máquina con 16 GB. http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
Tenga en cuenta que funciona mejor en el ejemplo de archivo de 80 GB, es probable que 8 TB sea excesivo. ;)
La respuesta a su pregunta depende más de las características de uso de la memoria caché que del tamaño de la memoria caché. Por ejemplo, relación de lectura/escritura, TTL, tamaño de los objetos que está almacenando, cantidad de objetos que podría almacenar. Además, tu pregunta es hacer una pregunta bastante difusa. ¿Qué considerarías "demasiado tiempo"? o "¿Listo para el horario de máxima audiencia?" Debe saber qué tipo de SLA necesita antes de poder evaluar realmente cualquier solución de almacenamiento en caché. Tiempo máximo de respuesta en ms, y porcentaje de aciertos de SLA. – allingeek