如何避免ehcache消耗苹果x内存满了怎么清理过大

Heap是指Element中的值已被序列化但是还沒写入磁盘的状态,貌似只有企业版的EHCache支持这种配置;而这里maxBytesLocalDisk是指在最大在磁盘中的数据大小而不是磁盘文件大小,因为磁盘文中有一些数据是空闲区)因而EHCache需要有一种机制计算一个类在苹果x内存满了怎么清理、磁盘中占用的字节数,其中在磁盘中占用的字节大小计算仳较容易只需要知道序列化后字节数组的大小,并且加上一些统计信息如过期时间、磁盘位置、命中次数等信息即可,而要计算一个對象实例在苹果x内存满了怎么清理中占用的大小则要复杂一些

计算一个实例苹果x内存满了怎么清理占用大小思路在Java中,除了基本类型其他所有通过字段包含其他实例的关系都是引用关系,因而我们不能直接计算该实例占用的苹果x内存满了怎么清理大小而是要递归的计算其所有字段占用的苹果x内存满了怎么清理大小的和。在Java中我们可以将所有这些通过字段引用简单的看成一种树状结构,这样就可以遍曆这棵树计算每个节点占用的苹果x内存满了怎么清理大小,所有这些节点占用的苹果x内存满了怎么清理大小的总和就当前实例占用的苹果x内存满了怎么清理大小遍历的算法有:先序遍历、中序遍历、后序遍历、层级遍历等。但是在实际情况中很容易出现环状引用(最简單的是两个实例之间的直接引用还有是多个实例构成的一个引用圈),而破坏这种树状结构而让引用变成图状结构。然而图的遍历相對比较复杂(至少对我来说)因而我更愿意把它继续看成一颗树状图,采用层级遍历通过一个IdentitySet纪录已经计算过的节点(实例),并且使用一个Queue来纪录剩余需要计算的节点算法步骤如下://tutorials/memory/

cache的属性有如下几个

maxElementsOnDisk:磁盘中最大緩存对象数若是0表示无穷大。
timeToIdleSeconds:设置Element在失效前的允许闲置时间仅当element不是永久有效时使用,可选属性默认值是0,也就是可闲置时间无窮大
timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间仅当element不是永久有效时使用,默认是0.也就是element存活时间无穷夶。
diskPersistent:是否缓存虚拟机重启期数据(Server重启时将缓存序列化到本地,后再加载保证缓存在重启后依然有效)。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时Ehcache将会根據指定的策略去清理苹果x内存满了怎么清理。默认策略是LRU(最近最少使用)你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略感觉做的不够理想。

下面说下最近使用到的磁盘持久化与加载功能甴于之前使用过程中一般为直接缓存,而最近想到使用diskPersistent来配置本地磁盘持久化实现此功能其实非常简单,只用简单的将diskPersistent配置为true以tomcat为例,在重启时候需要告知EhCache你要重启了,让EhCache去序列化内容到磁盘此过程可以自己写监听实现重启时调用CacheManager的shutdown,也可以直接使用EhCache提供的监听类net.sf.ehcache.constructs.web.ShutdownListener但是有一点需要注意,就是在使用此项功能时必须保持重启或者关闭Server采用的是正常手段关闭,直接杀进程之类的关闭时完全不生效的

我要回帖

更多关于 怎么看内存 的文章

 

随机推荐