一:缓冲区是一块特定的内存区域,其目的是通过缓解应用程序上下层之间的性能差异,减少上层对下层的等待时间,以此提高系统性能。漏斗是生活中常见的缓冲例子,下层如瓶口等工作效率低,但是上层注水口如水桶工作效率较高,他们之间使用漏斗进行缓冲,可以使上层应用抽空执行其他的任务,用以提高整体的工作效率。
二:现在我们使用java代码执行以下程序比较有无缓冲区之间的差距:
(无缓冲区):
public class Test2 { public static void main(String[] args) { Writer writer=null; try{ writer=new FileWriter("D:\\hello.txt"); long num=10_0000; long bigTime=System.currentTimeMillis(); for(int i=0;i<num;i++){ writer.write(i); } long engTime=System.currentTimeMillis(); System.out.println("无缓冲区此时的执行时间是:"+(engTime-bigTime)+"毫秒"); }catch (Exception e){ e.printStackTrace(); }finally { try{ writer.close(); } catch (Exception e){ e.printStackTrace(); } } } }
(有缓冲区):
public class Test2 { public static void main(String[] args) { Writer writer=null; //定义缓冲流 BufferedWriter bufferedWriter=null; try{ writer=new FileWriter("D:\\hello.txt"); bufferedWriter=new BufferedWriter(writer); long num=10_0000; long bigTime=System.currentTimeMillis(); for(int i=0;i<num;i++){ bufferedWriter.write(i); } long engTime=System.currentTimeMillis(); System.out.println("有缓冲区此时的执行时间是:"+(engTime-bigTime)+"毫秒"); }catch (Exception e){ e.printStackTrace(); }finally { try{ bufferedWriter.close(); writer.close(); } catch (Exception e){ e.printStackTrace(); } } } }
我们可以明确看见加了缓冲区的代码比不加缓冲区的代码其性能提升了几倍,在我们要执行数据比较庞大的任务时加缓冲区有利于提升执行性能,但是缓冲区不能太大也不能太小,根据任务适中定义。