java

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

Java程序性能优化-对象复用“池”(1)


发布日期:2019年03月23日
 
Java程序性能优化-对象复用“池”(1)

对象复用

对象池化是目前非常常用的一种系统优化技术它的核心思想是如果一个类被频繁请求使用那么不必每次都生成一个实例可以将这个类的一些实例保存在一个待需要使用的时候直接从池中获取这个就称为对象池在实现细节上它可能是一个数组一个链表或者任何集合类

对象池的使用非常广泛其中最为大家所熟悉的就是线程池和数据库连接池线程池中保存着可以被重用的线程对象当有任务被提交到线程池时系统并不需要新建线程而是从池中获得一个可用的线程执行这个任务在任务结束后也不关闭线程而将它返回到池中以便下次继续使用由于线程的创建和销毁是较为费时的工作因此在线程调度频繁的系统中线程池可以很好地改善性能有关线程池更详细的介绍读者可以参考第章中简单的线程池实现一节

数据库连接池也是一种特殊的对象池它用于维护数据库连接的集合当系统需要访问数据库时不需要重新建立数据库连接而可以直接从池中获取在数据库操作完成后也不关闭数据库连接而是将连接返回到连接池中由于数据库连接的创建和销毁是重量级的操作因此避免频繁进行这两个操作对改善系统的性能也有积极意义

注意在程序中使用数据库连接池和线程池可以有效地改善系统在高并发下的性能这是两个非常重要的性能组件任何对性能敏感的系统都需要考虑合理配置这两个组件

目前应用较为广泛的数据库连接池组件有CP和Proxool其中CP是伴随着Hibernate一起发布与Hibernate联系紧密的数据库连接池本文以CP为例展示数据库连接池的一般使用方法和特性

若在Hibernate中使用CP连接池只需要将CP的jar包复制到开发环境中并且在hibernatecfgxml中加入以下配置项即可

<property name=connectionprovider_class>orghibernateconnection

CPConnectionProvider</property>

<property name=connectionautoReconnect>true</property>

<property name=connectionautoReconnectForPools>true</property>

<property name=connectionisconnectionvalidationrequired>true

</property>

<! 最大连接数 >

<property name=hibernatecpmax_size></property>

<! 最小连接数 >

<property name=hibernatecpmin_size></property>

<! 获得连接的超时时间如果超过这个时间会抛出异常单位毫秒 >

<property name=hibernatecptimeout></property>

<! 最大的PreparedStatement的数量 >

<property name=hibernatecpmax_statements></property>

<! 每隔秒检查连接池里的空闲连接单位是秒>

<property name=hibernatecpidle_test_period></property>

<! 当连接池里的连接用完时CP一次性获取的新的数据库连接数 >

<property name=hibernatecpacquire_increment></property>

<! 每次都验证连接是否可用 >

<property name=hibernatecpvalidate>true</property>

当然也可以脱离Hibernate单独在应用程序中使用CP以下代码构造了一个CP的数据库连接池并从中获得一个数据库连接

DataSource unpooled = DataSources

unpooledDataSource(

jdbc:mysql://:/test //连接MySQL数据库

root //这个不是连接池

DataSource pooled = DataSourcespooledDataSource(unpooled)

//构建了一个连接池

con = pooledgetConnection() //从连接池中获取连接

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

编辑推荐

Java程序设计培训视频教程

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

JME移动开发实战教学视频

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

Oracle索引技术

ORACLEG数据库开发优化指南

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

下一篇:Java程序性能优化-对象复用“池”(2)[2]