Ehcache put无法添加堆

时间:2016-01-19 15:02:16

标签: java caching ehcache

给出以下缓存配置(ehcache-core 2.6.0)

<ehcache>
    <cache name="myTestCache"
        maxBytesLocalHeap="10M"
        maxBytesLocalDisk="100M"
        eternal="true"            
        memoryStoreEvictionPolicy="LRU"
        statistics="true">
        <persistence 
            strategy="localTempSwap"
        />
        <sizeOfPolicy
            maxDepth="1000000"
        />
    </cache>
</ehcache>

我试着把物体放到约。 4MB大小(由ehcache本身测量)缓存,但在DEBUG级别上记录put failed to add on heap消息时,它被拒绝(没有缓存,没有抛出异常)。

所以我将maxBytesLocalHeap增加到50M,现在我的对象已成功缓存,并记录了put added 34355928 on heap消息。

所以我想知道,为什么ehcache sizeOf引擎说对象大小是4MB,但很难将它放入10MB缓存,超过它需要的两倍?我也从缓存中得到calculateInMemorySize,表明它的大小(我认为这是序列化的)实际上是4MB左右。

此对象放入内存时,ehcache记录

fault removed -34355696 from heap
fault added 5973558 on disk

考虑到这是缓存中的第一个对象,为什么它只存储0.7 MB到磁盘?我已经阅读了有关分层内存模型的信息,但这就像它只存储了从堆到磁盘的部分对象。

完成此操作后,统计信息现在显示

calculateInMemorySize = 35135952
calculateOnDiskSize = 5973558

此操作是否正确?这种行为有什么解释吗?

1 个答案:

答案 0 :(得分:0)

您共享的所有数字似乎表明该对象的内存大约为35MB。你在哪里得到的它是4MB?

至于堆和磁盘之间的大小差异,请记住写入磁盘的是序列化形式。根据您的对象结构,这确实可以使大小变化很大。