常用优化组件和方法
本节主要介绍可用于系统性能优化的组件和性能优化思想重点介绍缓沖和缓存这两个组件以及它们的使用方法此外还将介绍几种常用的优化思想如池化对象并行代替串行负载均衡以及时间换空间和空间换时间
缓沖(Buffer)()
缓沖区是一块特定的内存区域开辟缓沖区的目的是通过缓解应用程序上下层之间的性能差异提高系统的性能在日常生活中缓沖的一个典型应用是漏斗如图所示
图 缓沖的示意图
图显示了漏斗作为缓沖区的使用场景上层系统如茶壶下层系统如水瓶现需要将茶壶中的水倒入水瓶中这就有如将内存中的数据写入硬盘中一样茶壶的出水速度可以很快但是水瓶的瓶口很细因此形成性能瓶颈要将水全部倒入瓶中必须等待瓶口的水缓缓流下为了加快速度可以使用一个漏斗(缓沖)
漏斗的初始口径很大并且拥有一定的容量因此茶壶中的水可以先倒入漏斗中就有如内存数据先写入一块缓沖区只要漏斗的容量够大茶壶里的水很快就能倒完至此上层系统完成工作可以去处理其他业务逻辑而此时水并未完全进入瓶中而大部分被积累在漏斗中这就可以由下层系统慢慢处理直到水完全进入瓶中漏斗(缓沖区)被清空
注意缓沖可以协调上层组件和下层组件的性能差当上层组件性能优于下层组件时可以有效减少上层组件对下层组件的等待时间
基于这样的结构上层应用组件不需要等待下层组件真实地接受全部数据即可返回操作加快了上层组件的处理速度从而提升系统整体性能
缓沖最常用的场景就是提高I/O的速度为此JDK内不少I/O组件都提供了缓沖功能比如当使用FileWriter时进行文件写操作的代码如下
Writer writer = new FileWriter(new File(filetxt))
long begin=SystemcurrentTimeMillis()
for (int i = ; i < CIRCLE; i++) {
writerwrite(i) //写入文件
}
writerclose()
Systemoutprintln(testFileWriter spend:+(SystemcurrentTimeMillis()begin))
为进行I/O优化可以为FileWriter加上缓沖
Writer writer = new BufferedWriter(new FileWriter(new File(filetxt))) //增加了缓沖
long begin=SystemcurrentTimeMillis()
for (int i = ; i < CIRCLE; i++) {
writerwrite(i)
}
writerclose()
Systemoutprintln(testFileWriterBuffer spend:+(SystemcurrentTimeMillis()begin))
以上代码使用BufferedWriter为FileWriter对象增加缓沖功能BufferedWriter对象拥有两个构造函数
public BufferedWriter(Writer out)
public BufferedWriter(Writer out int sz)
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南