【发布时间】:2016-01-19 15:02:15
【问题描述】:
鉴于以下缓存配置(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 本身测量)缓存,但它被拒绝(不缓存,不抛出异常),put failed to add on heap 消息记录在 DEBUG 级别。
所以我将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
这个操作正确吗?这种行为有什么解释吗?
【问题讨论】: