java

位置:IT落伍者 >> java >> 浏览文章

Java程序性能优化-缓存(Cache)(1)


发布日期:2018年12月31日
 
Java程序性能优化-缓存(Cache)(1)

缓存(Cache)(

缓存(Cache)也是一块为提升系统性能而开辟的内存空间缓存的主要作用是暂存数据处理结果并提供下次访问使用在很多场合数据的处理或者数据获取可能会非常费时当对这个数据的请求量很大时频繁的数据处理会耗尽CPU资源缓存的作用就是将这些来之不易的数据处理结果暂存起来当有其他线程或者客户端需要查询相同的数据资源时可以省略对这些数据的处理流程而直接从缓存中获取处理结果并立即返回给请求组件以此提高系统的响应时间

缓存的使用非常普遍比如目前流行的几种浏览器都会在本地缓存远程的页面从而减少远程HTTP访问次数加快网页的加载速度又比如在服务端的系统开发中设计人员可以为一些核心API加上缓存从而提高系统的整体性能

最为简单的缓存可以直接使用HashMap实现当然这样做会遇到很多问题比如何时应该清理无效的数据如何防止缓存数据过多而导致内存溢出等一个稍好的替代方案是直接使用WeakHashMap它使用弱引用维护一张哈希表从而避免了潜在的内存溢出问题但是作为专业的缓存它的功能也略有不足

注意缓存可以保存一些来之不易的数据或者计算结果当需要再次使用这些数据时可以从缓存中低成本地获取而不需要再占用宝贵的系统资源

幸运的是目前有很多基于Java的缓存框架比如EHCacheOSCache和JBossCache等EHCache缓存出自Hibernate是Hibernte框架默认的数据缓存解决方案OSCache缓存是由OpenSymphony设计的它可以用于缓存任何对象甚至是缓存部分JSP页面或者HTTP请求JBossCache是由JBoss开发可用于JBoss集群间数据共享的缓存框架

下面以EHCache缓存为例简单介绍一下缓存的基本使用方法

在使用EHCache前需要对EHCache进行必要的配置一个典型的配置可能如下

<ehcache>

<diskStore path=data/ehcache />

<defaultCache maxElementsInMemory= eternal=false

overflowToDisk=true timeToIdleSeconds= timeToLiveSeconds=

diskPersistent=false diskExpiryThreadIntervalSeconds= />

<cache name=cache maxElementsInMemory= eternal=false

timeToIdleSeconds= timeToLiveSeconds= overflowToDisk=true

diskPersistent=false />

<cache name=cache maxElementsInMemory= eternal=false

timeToIdleSeconds= timeToLiveSeconds= overflowToDisk= false

diskPersistent=false />

</ehcache>

以上配置文件首先设置了一个默认的cache模版在程序中使用EHCache接口动态生成缓存时会使用这些参数定义新的缓存随后定义了两个缓存名字分别是cache和cache

配置文件中一些主要参数的含义如下

maxElementsInMemory:该缓存中允许存放的最大条目数量

eternal:缓存内容是否永久储存

overflowToDisk:如果内存中的数据超过maxElementsInMemory是否使用磁盘 存储

timeToIdleSeconds:如果不是永久储存的缓存那么在timeToIdleSeconds指定时间内没有访问一个条目则移除它

timeToLiveSeconds:如果不是永久储存的缓存一个条目可以存在的最长时间

diskPersistent:磁盘储存的条目是否永久保存

diskExpiryThreadIntervalSeconds:磁盘清理线程的运行时间间隔

EHCache使用简单可以像使用HashMap一样使用它但为了能够更方便地使用EHCache笔者还是对EHCache进行了简单的封装提供了EHCacheUtil工具类专门针对EHCache做各种操作

首先是EHCache的初始化操作

static{

try {

//载入EHCache的配置文件创建CacheManager

manager = CacheManagercreate

(EHCacheUtilclassgetClassLoader()getResourceAsStream(configfile))

} catch (CacheException e) {

eprintStackTrace()

}

}

返回目录Java程序性能优化让你的Java程序更快更稳定

编辑推荐

Java程序设计培训视频教程

JEE高级框架实战培训视频教程

JME移动开发实战教学视频

Visual C++音频/视频技术开发与实战

Oracle索引技术

ORACLEG数据库开发优化指南

上一篇:Java程序性能优化-缓沖(Buffer)(2)[1]

下一篇:Java程序性能优化-缓存(Cache)(2)