Il benchmarking è un'attività sfavorevole. È hard to get it right e easy to fake. A meno che la tua app non esaurisca tutti i cicli della CPU in metallo, non dovresti preoccuparti delle prestazioni: sia la cache Ehcache che quella guava sono sufficienti per un progetto medio.
Le cose che si desidera prestare attenzione sono API e funzionalità. Ad esempio, la cache Guava non può essere utilizzata come cache di ibernazione di secondo livello (ovvero, almeno per impostazione predefinita). OTOH Ehcache è cresciuto un po 'di grasso in termini di API e funzionalità strisciante, ma queste cose sono soggettive.
Tornando in tema, la cache Guava è stato originariamente tirato da un progetto separato, concurrentlinkedhashmap che, credo,
non è più supportato come tale
è solo un progetto one-man e ha perso un po 'di slancio (si veda il commento sotto questo post). Tuttavia, la vecchia pagina del progetto presenta ancora alcuni benchmark che dimostrano che le prestazioni di ConcurrentHashMap
(ora guava cache) sono prossime allo ConcurrentLinkedHashMap
. Spero che non si sia deteriorato.
Continuo a supportare CLHM, ma è un progetto one-man. CLHM ha una base algoritmica migliore e utenti pesanti, ma Guava è migliore per il caso comune a causa di più funzioni e un team dedicato. Le prestazioni sono leggermente peggiorate dopo la v1 a causa del supporto della rigida LRU per placare i test unitari per le migrazioni (i reclami relativi a un bug non severo), mentre Guava's Cache non è severa, ma attendibile per il marchio Google. L'ultima volta che ho fatto un benchmark con CLHM è stato appena più veloce di Guava, nonostante questa penalità. Tutte sono scelte eccellenti. –
Guava è già presente nel mio progetto, quindi userò semplicemente il supporto per il caching. Se le necessità del progetto cresceranno, prenderò in considerazione altre librerie. – Raul
Per riferimento futuro, consultare questi [benchmark JMH] (https://github.com/ben-manes/caffeine/wiki/Benchmarks) per un confronto. –