给出以下缓存配置(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
此操作是否正确?这种行为有什么解释吗?
答案 0 :(得分:0)
您共享的所有数字似乎表明该对象的内存大约为35MB。你在哪里得到的它是4MB?
至于堆和磁盘之间的大小差异,请记住写入磁盘的是序列化形式。根据您的对象结构,这确实可以使大小变化很大。