Java程序性能优化-缓冲(Buffer)(1)

Java程序性能优化-缓冲(Buffer)(1),第1张

  常用优化组件和方法

本节主要介绍可用于系统性能优化的组件和性能优化思想 重点介绍缓冲和缓存这两个组件以及它们陵搭的使用方法 此外 还将介绍几种常用的优化思想 如池化对象 并行代替串行 负载均衡 以及时间换空间和空间换时间

  缓冲(Buffer)( )

缓冲区是一块特定的内存区域 开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异 提高系统的性能 在日常生活中 缓冲的一个典型应用是漏斗 如图 所示

图   缓冲的示意图

图 显示了漏斗作为缓冲区的使用场景 上层系汪和统如茶壶 下层系统如水瓶 现需要将茶壶中的水倒入水瓶中 这就有如将内存中的数据写入硬盘中一样 茶壶的出水速度可以很快 但是水瓶的瓶口很细 因此形成性能瓶颈 要将水全部倒入瓶中 必须等待瓶口的水缓缓流下 为了加快速度 可以使用一个漏斗(缓冲)

漏斗的初始口径很大 并且拥有一定的容量 因此 茶壶中的水可以先倒入漏斗中 就有如内存数据先写入一块缓冲区 只要漏斗的容量够大 茶壶里的水很快就能倒完 至此 上层系统完成工作 可以去处理其他业务逻辑 而此时 水并未完全进入瓶中 而大部分被积累在漏斗中 这就可以由下层系统慢慢处理 直到水完全进入瓶中 漏斗(缓冲区)被清空

注意 缓冲可以协调上层组件和下层组件的性能差 当上层组件性能优于下层组件时 可以有效减少上层组件对下层组件的等待时间

基于这样的结构 上层应用组件不需要等待下层组件真实地接受全部数据 即可返回 *** 作 加快了上层组件的处理速度 从而提升系统整体性能

缓冲最常用的场景就是提高I/O的速度 为此 JDK内不少I/O组件都提供了缓冲功能 比如 当使用FileWriter时 进行文件写 *** 作的代码如下

Writer writer = new FileWriter(new File( file txt ))

long begin=System currentTimeMillis()

for (int i = i <CIRCLEi++) {

writer write(i)                                     //写入文件

}

writer close()困汪盯

System out println( testFileWriter spend: +(System currentTimeMillis() begin))

为进行I/O优化 可以为FileWriter加上缓冲

Writer writer = new BufferedWriter(new FileWriter(new File( file txt )))                                                        //增加了缓冲

long begin=System currentTimeMillis()

for (int i = i <CIRCLEi++) {

writer write(i)

}

writer close()

System out println( testFileWriterBuffer spend: +(System currentTimeMillis() begin))

以上代码使用BufferedWriter为FileWriter对象增加缓冲功能 BufferedWriter对象拥有两个构造函数

public BufferedWriter(Writer out)

public BufferedWriter(Writer out int sz)

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

编辑推荐

       Java程序设计培训视频教程

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

       J ME移动开发实战教学视频

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

Oracle索引技术

lishixinzhi/Article/program/Java/gj/201311/27807

Java文件上传服务器缓存指的是在将文件上传到服务器之前,将文件先大棚缓存在本地,以便提高上传速度和减少网络流量的滚正则过程。这样可以有效地提高文件上传的效率,减清雹少服务器的负载。

public class BufferMovingCircle extends NoBufferMovingCircle {

Graphics doubleBuffer = null               //缓冲区

public void init() {

super init()

doubleBuffer = screenImage getGraphics()

}

 和没 public void paint(Graphics g) { //使用缓冲区 优化原有的paint()方法

doubleBuffer setColor(Color white) //先在内存中画图

doubleBuffer fillRect( )

drawCircle(doubleBuffer)

g drawImage(screenImage this)    //将buffer一次性显示出来

}

}

加上缓冲区后 动画的显示要比之前清晰了许多 并且没有抖动和白光的出现

除了性能上的优化 缓冲区还可以作为上层组件和下层组件的一种通信工具 从而 将上层组件和下层组件进行解耦 优化设计结构 典型的案例可以参考本书饥雀第 章 生产者消费者模式 一节 在生产者消费者模式 连接生产者和消费者的缓冲区正是起到这个作用 有兴趣的读者 可以仔细阅读该节

注意 由于I/O *** 作很容易成为性能瓶颈 所以 尽可能在I/O读写中加入缓冲组件 以提高系统的性能

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

编辑推荐

       Java程序设计培训视频教程

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

       J ME移动开发实战教学视频

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

Oracle索引技术

ORACLE G数据库开发优化指南

lishixinzhi/Article/program/Java/gj/201311/27806


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12248339.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存