29.当无参的构造函数,或者静态构造方法被调用的时候,系统会在最顶层的classpath路径下找名叫ehcache.xml的配置文件,如果查找失败,会以jar包中的ehcache-failsafe.xml文件(里边的缓存配置极其简单)替代。同时,一个警告会提醒用户建立自己的配置文件。
30.Update checker可以检查是否有最新的ehcache版本。有两个办法可以去掉该功能:
1)通过系统参数:-Dnet.sf.ehcache.skipUpdateCheck=true
2)通过配置文件:
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="false" monitoring="autodetect"
dynamicConfig="true">
31.Ehcache1.6之前只支持ASCII编码,之后,UTF-8也被支持。但UTF-8比ASCII更多落后,所以没必要做专门的转换
32.每一个Cachemanager应该有自己的独有的ehcache.xml配置文件。因为,当共用时,硬盘缓存路径或者端口将会冲突。系统也会发出警告,提醒用户配置专门的配置文件为每一个cachemanager.在分布式系统中,ehcache.xml应该配置成一样的。
33.Ehcache有3个存储:
1)内存存储

2)非堆存储(大内存,企业ehcache才拥有)
3)硬盘存储(两个版本:开源的和企业级ehcache)
34.内存存储
其本质是使用java的LinkedHashMap来实现的。多线程安全、内存管理安全、速度快
35.calculateInMemorySize()可以用来计算当前ehcache内存占用大小。但生产线上不应该使用,因为这个功能效率非常低
36.同时,ehcache内部有一个低等级的进程,它会判断元素的是否过期。diskExpiryThreadIntervalSeconds属性可以设置该线程执行的间隔时间(默认是120秒,不能太小,以免影响效率).
37.非堆存储
Terracotta BigMemory是一个新增的功能,它允许系统占用堆以外的内存,速度是硬盘存储的100倍,允许很大的存储空间被创建(350G被测试过)
因为非堆数据是以字节流的形式存储,所以要求Element的key和value都要是可以序列化的。
因为序列化和反序列化的过程,这种存储形式比内存存储慢10倍
38.硬盘存储
线程安全的
39.当maxElementsOnDisk被设置的时候,硬盘上的存储达到限制时,LFU算被执行用于清除数据,只能是该算法,不可配置
40.Persistence被设置成false或者omitted,当系统重启时,不会硬盘的数据存储在硬盘上,.data文件将会被删除.相反,.data文件不会被删除,下次重启后Cachemanager还可以使用.data文件。ehcache使用
41.虚拟机被停止的时候,强烈建议调用Cachemanager.shutdown()方法。
42.在关闭java虚拟机时,系统执行以下步骤:
Considerations for guidance on how to safely shut the Virtual Machine down.
When a DiskStore is persisted, the following steps take place:
• Any non-expired Elements of the MemoryStore are flushed to the DiskStore
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25689-5.html
干嘛不把我大汉帝国虽远必诛的经验也集成进来
美国军舰是在12海里
中国没有不好