番石榴缓存可以使用的最大优选大小是多少?

agr*_*084 1 java caching guava google-guava-cache

番石榴缓存可以使用的最大优选大小是多少?我的系统有 8 GB RAM,因此在不降低系统和其他应用程序性能的情况下,我可以使用多少 MB?当 RAM 存储不可用时,Guava 缓存是否也使用硬盘存储?

cru*_*tex 6

您只能限制缓存中的条目数。在 Guava 中,无法以兆字节为单位指定大小限制。EHCache支持以兆字节为单位指定大小限制,但是,确定缓存条目的大小是一项艰巨的任务,涉及一些魔术、猜测和性能开销。

当 RAM 存储不可用时,Guava 缓存是否也使用硬盘存储?

不,它只是 Java 堆。有关详细信息,请参阅CachesExplained · google/guava Wiki

在实践中,您从一个合理但较低的缓存大小开始,然后增加它,同时关注您的堆内存消耗。

实际上是“如何调整缓存大小?”的问题。不是很容易回答,通常有经验和直觉相结合。稍微拓宽答案并为您提供更多方向:

先决条件

  • 确保您了解 Java 堆和垃圾收集的一般概念
  • 了解/检查 JVM 的最大堆大小设置。请参阅:如何确定默认的 Java 堆大小?
  • 了解如何监控和解释堆消耗和 GC 活动,例如使用 VisualVM,请参阅:http : //visualvm.java.net/monitor_tab.html
  • 知道如何从缓存中检索和解释统计信息,尤其是命中率
  • 了解您的数据、一个条目的估计大小(以字节为单位)以及活动数据集的大小计数

经验法则

  • 争取达到 90% 以上的命中率。如果较小,请增加缓存大小,或者,了解缓存不是很有效的原因。可能的原因:缓存未命中,因为到期时间较短,大量顺序扫描。有时您可以改进您的应用程序或摆弄其他参数然后调整缓存大小以优化您的命中率。
  • 对于第一个“最佳选择”,配置缓存大小(以条目数计)至少为活动数据集大小的 10%