【发布时间】:2014-09-05 18:35:23
【问题描述】:
我想知道缓存中使用了多少字节。这对于确定合理的大小很有用。统计 Google Guava 缓存中使用的字节数有哪些好方法?
stats 方法没有给出我想要的;它不包括缓存中字节数的指标。
asMap 方法是迄今为止我发现的最好方法。获得此信息后,可以使用In Java, what is the best way to determine the size of an object? 中显示的一些技术。但是,坦率地说,这些看起来相当痛苦,至少从 Clojure 代码库来看是这样。为了避免一些依赖,我目前正在使用一个粗略的快捷方式与Nippy,一个Clojure 序列化库:(count (nippy/freeze (.asMap cache)))。我正在寻找更好的方法。
我正在使用 Clojure 代码库中的 Google Guava 缓存,但我的问题不一定是 Clojure 特定的;在大多数情况下,Java 互操作相对容易。
更新:回应以下评论的一些上下文。首先,我想知道我是否忽略了 Google Guava 缓存 API 的有用部分。其次,我不知道我链接的通用方法(用于计算堆上的内存使用量)是否适用于 Guava。更广泛地说,查找缓存大小利用率是一个重要的用例,所以我有点惊讶它没有更好地在线记录。
【问题讨论】:
-
这个问题如何使它不是链接问题的完全重复?您想找到一个对象的大小,这让您感到难过,这并不容易,您正在考虑对其进行序列化并计算字节数:这些正是另一个问题的要点。
-
@amalloy 上面已更新。这个问题不是 exact 重复的——尽管可能有共同点——因为我是在 Guava 的上下文中问的。不明显(至少对我而言)链接问题中显示的方法最适合此用例。
-
您链接到的答案是“相当痛苦”,因为 没有非痛苦的方法来衡量 Java 对象(包括 Guava 缓存)的内存使用量(以字节为单位)。在线记录并没有更好的记录,因为您通常最好尝试找到其他要衡量的东西。