`
- 浏览:
146938 次
- 性别:
- 来自:
南京
-
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缓存最核心的部分个人觉得在于对象的有效性,缓存的命中率越高意味着性能越高,命中率跟缓存对象的有效性息息相关,如何保证对象有效这个很难,也很有搞头,如果缓存中对象有效性很差,其性能甚至会低于不用缓存,因为缓存本身就会耗性能跟资源,缓存的对象很多都很快失效了无疑得不偿失,还有缓存的深度也有讲究,这个深度是指从页面到数据库,显然是页面缓存的性能最好,因为调用页面缓存消耗的资源最少,当然现实中是不可能有太多页面缓存的。
个人觉得缓存是把双刃剑,一定要根据缓存的特征和业务场景来选择使用才能发挥其最大优势。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
缓存是什么,解决什么问题?可下载下来学习一下。希望能帮到大家。
在源码层面,开发者通常会使用各种编程语言提供的缓存库或框架,如Java中的Guava Cache、Spring Cache,Python中的Redis或Memcached客户端等。这些工具帮助开发者轻松地集成缓存功能,并提供了丰富的API来管理缓存...
为了提高读写效率,Java还提供了缓冲流`BufferedReader`和`BufferedWriter`,它们分别是对`InputStreamReader`和`OutputStreamWriter`的封装,能够缓存多次读写操作,从而减少磁盘访问次数。 - **BufferedReader**:...
在Android开发中,缓存策略对于提升应用性能和用户体验至关重要,尤其是在处理大量数据或资源时。本文主要讨论了Android中的LruCache缓存策略,它是一种高效的内存管理机制,尤其适用于图片或者其他大对象的缓存。 ...
浅谈Linux内核之CPU缓存.pdf
浅谈Java如何实现一个基于LRU时间复杂度为O(1)的缓存 本文主要介绍了如何使用Java实现一个基于LRU(Least Recently Used,最近最少使用)时间复杂度为O(1)的缓存。LRU缓存是一种常用的缓存策略,当缓存容量不足时,...
浅谈Java引用和Threadlocal的那些事 本文主要介绍了Java引用和Threadlocal的知识点,包括Java中的引用类型、Threadlocal的使用等。 Java中的引用类型: Java中有四种引用类型:强引用(Strong Reference)、软...
- **缓存对象**:缓存常用对象以减少垃圾收集。 - **JNI调用**:尽量减少Java本地接口(JNI)的使用,分组本地操作。 - **同步控制**:谨慎使用同步方法,减少多线程开销。 - **垃圾回收**:避免不必要的垃圾...
"浅谈java指令重排序的问题" Java指令重排序是Java虚拟机(JVM)和CPU的优化机制,目的是为了提高程序的执行效率。该机制可以在虚拟机层面和硬件层面对指令进行重新排序,以充分利用CPU的资源。 虚拟机层面的指令...
这可能是由于Freemarker 2.3.23具有良好的缓存机制和优化算法。 选择合适的Java模板引擎需要考虑多种因素,如性能、易用性、灵活性等。开发者可以根据自己的需求选择合适的模板引擎,以提高Web应用程序的性能和可...
此外,事务管理和并发控制对于多用户环境下的数据一致性至关重要,而缓存机制则能提升查询速度。 最后,Spring框架,以其依赖注入(IoC)和面向切面编程(AOP)闻名。IoC使得对象间的依赖关系可以通过配置文件或...
浅谈Java中hashCode的正确求值方法 hashCode是一种常用的散列函数,在Java中它是一个对象的整数表示,用于标识对象的唯一性。在Java中,每个对象都有一个hashCode,这个hashCode可以通过hashCode()方法来获取。...
软引用常用于实现缓存,如网页缓存和图片缓存,以便在内存紧张时自动释放资源。 - 示例代码: ```java SoftReference<String> sr = new SoftReference(new String("hello")); ``` 3. **弱引用(WeakReference)...
Oracle内存分为系统全局区(SGA)、程序全局区(PGA)、排序区(SORT AREA)、大池(LARGE POOL)和Java语言区(JAVA POOL)。SGA是最关键的部分,它包含数据缓冲区、日志缓冲区和共享池。数据缓冲区存储从数据文件...
在这里,`Integer.valueOf(int)` 方法会检查传入的值是否在-128到127之间,如果是,则从IntegerCache缓存中获取对象,否则创建新的Integer对象。 ### 类的常量池 类的常量池包含了类文件中的常量信息,如字段名、...
Java 中的引用类型详解 Java 中的引用类型是 Java 开发者非常熟悉的一个概念,它们从强到弱分别是:强引用、软引用、弱引用和虚引用。下面我们详细看看这些引用类型。 强引用 强引用是 Java 中最常见的一种引用...
Java中的自动装箱和拆箱是自JDK 1.5版本引入的一种语言特性,它极大地简化了基础数据类型(如int)与它们对应的包装类(如Integer)之间的转换过程。这一特性使得开发者无需手动创建包装类实例或使用显式类型转换,...
Java的内存模型借鉴了硬件的这种分层结构,将主内存视为所有线程共享的存储区域,而每个线程都有自己独立的工作内存,类似于CPU的L1缓存。线程的工作内存保存了从主内存拷贝的变量副本,线程间的通信需要通过主内存...