我正在使用 Ehcache(版本 2.7.1)并希望定期检索统计信息,例如缓存中的元素数量和缓存大小(以字节为单位)。我遇到的问题是使用net.sf.ehcache.statistics.StatisticsGateway.getLocalHeapSizeInBytes()
(StatisticsGateway 通过调用检索net.sf.ehcache.Ehcache.getStatistics()
)需要很长时间,15000 个元素,总大小约为 536MB。在我的本地机器上的一个示例中,获得此统计信息需要 21 秒。
在我经历了这个之后,我想,“maxBytesLocalHeap
如果需要这么长时间才能给我堆大小统计信息,那么缓存设置到底如何工作?” 如下所示,我的缓存没有设置maxBytesLocalHeap
,而是maxElementsInMemory
设置。所以,我决定改用这个maxBytesLocalHeap
设置,瞧,现在大约需要 1 毫秒才能得到统计数据。
因此,如果缓存不使用该maxBytesLocalHeap
设置,Ehcache 似乎很可能不会保存堆大小的统计信息。相反,它会一次又一次地为我为该统计数据所做的每次调用计算每个对象的大小。不过,我想要这些统计数据,我只是不想将它们用作驱逐政策的一部分。所以我然后尝试设置statistics="true"
,但是我仍然没有更快地恢复我的堆大小统计信息。我尝试搜索 Ehcache 文档以找到答案,甚至查看了ehcache.xsd中可能缺少的设置,但我没有找到任何相关的内容。
有谁知道即使maxBytesLocalHeap
不使用缓存设置,如何让 Ehcache 保持堆大小统计信息?
<cache name="myCache"
timeToIdleSeconds="1800"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU"
diskPersistent="false"
maxElementsInMemory="0"
statistics="true"/>