Основная проблема с большим кешем - полное время GC. Чтобы дать вам представление, это может быть 1 секунда на ГБ (это зависит от приложения к приложению). Если у вас кэш-память объемом 20 ГБ, а приложение периодически останавливается на 20 секунд, это приемлемо?
Как поклонник файлов с прямым отображением и отображением в памяти, я склонен думать о том, когда бы я не выкладывал данные из кучи, а просто использовал их для простоты. ;) Файлы с отображением в памяти практически не влияют на полное время GC независимо от размера.
Одним из преимуществ использования файла с отображением в памяти является то, что он может быть намного больше вашей физической памяти и при этом работать достаточно хорошо. Это оставляет ОС определять, какие части должны быть в памяти, а какие должны быть записаны на диск.
Кстати: более быстрый SSD также помогает;) Большие накопители также имеют тенденцию работать быстрее. Проверьте IOP, которые они могут выполнить.
В этом примере я создаю файловую память объемом 8 ТБ, сопоставленную на машине с 16 ГБ. http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
Обратите внимание, что в примере с файлом размером 80 ГБ он работает лучше, 8 ТБ, скорее всего, будет слишком большим. ;)