转载请注明出处哈:http://carlosfu.iteye.com/blog/2237511
一、Ehcache存储层级示意图:
二、层级说明
1、MemStore(通常指堆内存储)
(1) 堆内存储,受制于GC
(2) 理论上最快,可以存储序列化和非序列化数据
(3) 线程安全
(4) 如果使用了OffHeapStore,那么MemStore保存The hottest subset of data from thre OffHeapStore.
2、OffHeapStore(堆外内存:被称为BigMemory):
有关堆外内存:可以参考如下文章:http://calvin1978.blogcn.com/articles/directbytebuffer.html
只在企业版本的Ehcache(BigMemory)中提供,原理是利用nio的DirectByteBuffers实现,比存储到磁盘上快,而且完全不受GC的影响,可以保证响应时间的稳定性;但是direct buffer的在分配上的开销要比heap buffer大,而且要求必须以字节数组方式存储,因此对象必须在存储过程中进行序列化,读取则进行反序列化操作,它的速度大约比堆内存储慢一个数量级。
(注:direct buffer不受GC影响,但是direct buffer归属的的JAVA对象是在堆上且能够被GC回收的,一旦它被回收,JVM将释放direct buffer的堆外空间。)
(1) 堆外内存,不受制于GC
(2) 只在Bigmemory中能用,Ehcache不支持。
(3) 堆外内存使用字节码存储,所以只能存储序列化数据。
3、DiskStore(磁盘存储):
(1) 只能存储序列化的数据。
(2) 此数据层是可选的,不是必须的。