Существуют различные решения для кэширования в Java. Среди них Infinispan, EhCache и OSCache.
Все они также могут использоваться автономно, например, ни один из них не был предназначен исключительно для использования в качестве поставщика кэширования Hibernate.
Функциональные возможности между кешами немного различаются. Например, Infinispan обеспечивает первоклассную поддержку транзакций (то есть элемент не будет вставлен в кеш, если транзакция, в которую был вставлен элемент, отката). EhCache имеет отличную поддержку для действительно больших внутрипроцессных, но не кучи хранилищ для кеша.
OSCache поставляется с очень удобными тегами для кэширования контента на страницах JSP (но это не работает, например, с JSF).
Большинство из них способны выполнять обычное перетекание на диск и имеют некоторые механизмы для аннулирования устаревших записей. Например, в Infinispan есть политики удаления, и они действительно удаляют устаревшие записи из кэша (экономя память). OSCache, в свою очередь, никогда не удаляет запись из кэша, но помечает ее как устаревшую. При доступе к записи вызывающему сообщается о необходимости обновить запись (раньше она была исключением, но теперь может отличаться).
Обычно это то, что отличает «кеш» от простой параллельной хэш-карты. Если ваши требования скромны, не забывайте об этом простом решении. Кэш может быть довольно сложно настроить, и вам может также подойти параллельная карта в области приложения.