java中要用到缓存的地方很多,首当其冲的就是持久层缓存,针对持久层谈一下: 
要实现java缓存有很多种方式,最简单的无非就是static HashMap,这个显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行(看了Ibatis的缓存机制才发现JDK居然还提供了PhantomReference这玩意儿,得恶补基础啊),这三种都是弱引用,区别在于强度不同,至于弱引用概念个人理解就是对象的生命周期与JVM挂钩,JVM内存不够了就回收,这样能很好的控制OutOfMemoryError 异常。 
(推荐文章:http://www.ibm.com/developerworks/cn/java/j-jtp11225/>

以上就是内存级别的缓存,但是很多情况下是满足不了企业应用的,大数据量的缓存肯定还是要保存到文件,这个时候光用JDK来实现就比较复杂了,这里当然要用到第三方开源框架来实现了,常用的有Oscache,Ehcache,Jcache,Jbosscache等等很多,推荐还是Ehcache与Oscache,hibernate采用了Ehcache做为其缓存机制默认实现,Oscache没深入研究,但是Ibatis推荐的缓存为这个。 
为什么要缓存,无非就是节省访问时间已经大并发量带来的访问上资源的消耗,这个资源有软资源和硬资源,做java的几乎每天都在有意识或者无意识的跟缓存打交道,最常见的缓存,Connection Pool,还有IOC其实也算一个。 
     缓存用的好能提高性能,用的不好反而会急剧的降低产品的性能,就拿hibernate来说,hibernate性能肯定不如jdbc,但是缓存用的好的话增删改查的性能相差无几,hibernate缓存最核心的部分个人觉得在于对象的有效性,缓存的命中率越高意味着性能越高,命中率跟缓存对象的有效性息息相关,如何保证对象有效这个很难,也很有搞头,如果缓存中对象有效性很差,其性能甚至会低于不用缓存,因为缓存本身就会耗性能跟资源,缓存的对象很多都很快失效了无疑得不偿失,还有缓存的深度也有讲究,这个深度是指从页面到数据库,显然是页面缓存的性能最好,因为调用页面缓存消耗的资源最少,当然现实中是不可能有太多页面缓存的。

个人觉得缓存是把双刃剑,一定要根据缓存的特征和业务场景来选择使用才能发挥其最大优势。

最新文章

  1. Web缓存杂谈
  2. 吐槽scala
  3. 另类的表单数据"序列化"
  4. appserv中php升级问题
  5. Jmeter组件5. 逻辑控制
  6. NYOJ 38布线问题
  7. dede如何新建一个ajax服务端输出文件
  8. Discuz 论坛的搭建(五)
  9. [terry笔记]物化视图 materialized view基础学习
  10. OpenJudge/Poj 1088 滑雪
  11. 使用UDL文件来测试SQL Server数据库连接
  12. MySql-授权,使远程主机能够访问自己的数据库
  13. JS实现静态html页面左侧导航,右侧连接页面
  14. Beautiful Soup 定位指南
  15. sql中常见日期获取
  16. JAVA 中数组的几种排序方法
  17. BZOJ 3707 圈地
  18. Python中操作SQLAlchemy
  19. noip第23课作业
  20. code format using astyle

热门文章

  1. Jmeter之JDBC请求参数化(二)
  2. Nuxt.js使用详解
  3. MySQL单表数据不超过500万:是经验数值,还是黄金铁律?
  4. ORB-SLAM2:一种开源的VSLAM方案(译文)
  5. (C/C++学习)16.函数指针
  6. 魂酥的NOIP2018(真实)游记
  7. 首次开通blog,以后会慢慢把oneNote和印象笔记的笔记转过来
  8. Oracle 参数文件
  9. 57.fielddata预加载机制以及序号标记预加载
  10. react入门----基础语法