gpt4 book ai didi

java - 如何配置缓存 (guava)

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:01 25 4
gpt4 key购买 nike

我在我的 gwt-webapp 的服务器端使用 guava 的缓存。但是要正确配置缓存,我需要了解一些“遥测”。首先,我需要知道一个缓存条目占用多少内存。到目前为止,我尝试了 jconsole 和 visualvm。问题是,我不知道去哪里看。我查找了 ConcurrencyHashMap 及其条目,但找不到正确数量的实例。

那么分析 (guava) 缓存的好方法是什么?

(目前我还没准备好花钱买一个工具来获得缓存(条目)大小的近似值/平均值)

讨论状态总结:Aaron Digulla 建议使用弱引用并让 Java 完成管理内存的工作。但是在 previous question由于使用弱引用的性能问题,人们建议“调整、监控、调整”缓存。

更新好吧,我的问题可能是误导——我不想了解有关缓存或其开销的信息。我想知道给定对象的实例有多大 - 配置缓存(在本例中为 Guava )。我必须回答的第一个问题是:我能否在内存中获取所有实例(100% 命中率)或这将占用多少内存。如果可能,则不需要缓存配置。如果所有对象都会占用太多内存,我必须考虑配置。我希望有一种工具可以说明对象的平均内存占用量。

最佳答案

正确的解决方案是调用stats() 方法。缓存使用的内存量几乎无关紧要,尤其是当您查看内存价格时。从 ROI 的角度来看:如果您花费超过几个小时来尝试内存优化缓存,那么再安装 4GB RAM 会更便宜。

此外,确定“条目的大小”也不容易。根据您放入缓存的值,单个条目的大小可能会有所不同。您可以尝试查找 LocalCache.LocalLoadingCache 的实例(如果您在 build() 中使用了 CacheLoader)或 LocalCache。 LocalManualCacheheap dump 中.

这应该为您提供实例大小的平均值,但这不会有太大帮助:大小不是“递归的”,因此它没有考虑引用。包含引用的问题是在哪里停止。

例如,每个类都有一个对类加载器的引用。许多类加载器保留对它们加载的所有类的引用。如果将其包括在内,您的实例的大小将相差甚远。

YourKit非常擅长这种分析,但正如我上面所说,通常不值得。

关于java - 如何配置缓存 (guava),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10170232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com