【设计优化】-使用缓冲(Buffer)提高程序性能
缓冲区是一块特定的内存区域。开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能。
缓冲能够协调上层组件和下层组件的性能差异。当上层组件性能因为下层组件时,能够有效地降低上层组件对下层组件的等待时间。比如,在操作系统中,为了改善 CPU 与 I/O 设备速度不匹配的矛盾,设置了缓冲区,程序输出的数据先送到缓冲区暂存,然后由I/O 设备慢慢地处理。这时,CPU不必等待,能够继续运行程序。实现了CPU与I/O设备之间的并行工作。其实,凡在数据的到达速率与其离去速率不同的地方,都可设置缓冲,以缓和它们之间速度不匹配的矛盾。
缓冲最经常使用的场景就是提高 I/O 速度。为此 JDK 内不少 I/O 组件都提供了缓冲功能。比方,使用 FileWriter时,进行文件写操作的代码例如以下:
public class BufferTest {
public static final int CIRCLE = 100000;
public static void test1() throws Exception {
Writer writer = new FileWriter(new File("file1.txt"));
for (int i = 0; i < CIRCLE; i++) {
writer.write(i);
}
writer.close();
}
public static void test2() throws Exception {
Writer writer = new BufferedWriter(
new FileWriter(new File("file2.txt")));
for (int i = 0; i < CIRCLE; i++) {
writer.write(i);
}
writer.close();
}
public static void main(String[] args) throws Exception {
test1();
test2();
}
}
test1() 使用普通的 FileWriter 类进行写文件,而 test2() 使用 BufferedWriter 为 FileWriter 对象添加�了缓存功能。
BufferedWriter 有两个构造函数:
public BufferedWriter(Writer out)
public BufferedWriter(Writer out, int sz)
第一个构造函数将构造大小为 8K 的缓冲区。一般来说,缓冲区不宜过小,过小的缓冲区无法企到真正的缓冲作用,缓冲区也不易过大,过大的缓冲区会浪费系统内存,添加� GC 负担。
第二个构造函数同意手动指定缓冲区大小。
分别执行两个方法,使用 TPTP 分析执行时间:
能够观察到,使用了缓冲区和未使用缓冲区的写文件花费的时间相差有 3~5 倍之多。
还有一个实用的缓冲组件是 BufferedOutputStream。使用 它能够包装全部的 OutputStream , 为其提供缓冲功能,提高输出流的效率。和BufferedWriter 类似,它也提供了两个构造函数
public BufferedOutputStream(OutputStream out)
public BufferedOutputStream(OutputStream out, int size)
作用类似于上文提到的 BufferedWriter 。
除了能够改善 I/O 性能,缓冲区对不论什么一种上下层组件存在性能差异的场合都能够得到非常好的效果。比如绘图类程序,能够使用内存缓冲区,先在内存中绘图,然后一次性显示出整个图像。
除了性能上的优化,缓冲区还能够作为上层组件和下层组件的一种通信工具。从而将上层和下层组件解耦,优化设计结构。比如使用生产者消费者模式,连接生产者和消费者的缓冲区。
【设计优化】-使用缓冲(Buffer)提高程序性能的更多相关文章
- [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)
[.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...
- [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)
[.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...
- [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)
[.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...
- asp.net提高程序性能的技巧(一)
[摘 要] 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多的信息请参考<Improving ASP.NET Pe ...
- Matlab优化存储器读写来改善程序性能
最近用Matlab写程序的时候终于遇到了程序执行效率的问题,于是在Google上面搜索了一篇提高代码性能的文章,简单的概括一下. 文章是通过优化寄存器读写来提高执行速度的,主要体现在三个方面: 在做循 ...
- Spring MVC 异步处理请求,提高程序性能
原文:http://blog.csdn.net/he90227/article/details/52262163 什么是异步模式 如何在Spring MVC中使用异步提高性能? 一个普通 Servle ...
- .Net Core中使用ref和Span<T>提高程序性能
一.前言 其实说到ref,很多同学对它已经有所了解,ref是C# 7.0的一个语言特性,它为开发人员提供了返回本地变量引用和值引用的机制. Span也是建立在ref语法基础上的一个复杂的数据类型,在文 ...
- .NET程序性能优化的基本要领
Bill Chiles(Roslyn编译器的程序经理)写了一篇文章<Essential Performance Facts and .NET Framework Tips>,知名博主寒江独 ...
- .NET程序性能优化基本要领
想了解更多关于新的编译器的信息,可以访问 .NET Compiler Platform ("Roslyn") 基本要领 在对.NET 进行性能调优以及开发具有良好响应性的应 ...
随机推荐
- Android监听外部存储设备的状态(SD卡、U盘等等)
近期在项目中须要对外部存储设备的状态进行监听,所以整理了此笔记,以便日后查看. 外部存储设备的状态变化时发出的广播 对照不同状态下的广播 1. 插入外部SD卡时: 2. 移除外部SD卡时: 3. 连接 ...
- niu人
金步国简历 金步国简历 基本资料 姓名 金步国 性别 男 年龄 30 籍贯 江苏 淮安 院校 同济大学 专业 土木工程 学历 本科肄业 工作经验 5年 期望地点 长江以南 期望薪水 18000/月 个 ...
- Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Fai ...
- hadoop深入研究:(七)——压缩
转载请标明出处:hadoop深入研究:(七)——压缩 文件压缩主要有两个好处,一是减少了存储文件所占空间,另一个就是为数据传输提速.在hadoop大数据的背景下,这两点尤为重要,那么我现在就先来了解下 ...
- 1-5html文件基本结构
认识html文件基本结构 1)这一节中我们来学习html文件的结构:一个HTML文件是有自己固定的结构的. <html> <head>...</head> < ...
- expdp时遇到ORA-31693&ORA-02354&ORA-01466
expdp时遇到ORA-31693&ORA-02354&ORA-01466 对一个schema运行expdp导出,expdp命令: nohup expdp HQ_X1/HQ_X1 DU ...
- CodeForce 356A Knight Tournament(set应用)
Knight Tournament time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- ThinkPHP的连贯操作方法中field方法
ThinkPHP的连贯操作方法中field方法有很多的使用技巧,field方法主要目的是标识要返回或者操作的字段,下面详细道来. 1.用于查询 在查询操作中field方法是使用最频繁的. $Model ...
- 《算法导论》 — Chapter 7 高速排序
序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...
- swift 简单语句 控制流语句
在 Swift 中.有两种类型的语句:简单语句和控制流语句.简单语句是最常见的.用于构造表达式和声明.控制流语句则用于控制程序运行的流程,Swift 中有三种类型的控制流语句:循环语句.分支语句和控制 ...