缓冲是什么?
先来讲个生活小常识吧!在生活中,我们把一个瓶子A里面的油导入另外一个瓶子B里面的时候,被倒入的瓶子B的口太小,这样子速度会很慢,那么如果我们用个漏斗是不是就快多了,把A中的d倒入漏斗,就不用一直守着等待B接收了所有再去装别的东西了,这样子省时间。这里的缓冲区就是相当于这个漏斗的作用。
通过缓冲区的缓冲,当上层组件的性能优于下层组件的时候,缓冲可以有效减少上层组件对下层组件等待的时间,就像是上图所示,上层传递过来的数据是6个单位,而下层每次只能接收3个单位,如果没有缓冲的话,那么我们的上层完整的把数据传递出去需要等待下层每次3个单位接收完,这样很费时间。
但是有了缓冲,上层组件不需要等待下层组件完全接收全部数据即可返回进行其他操作。利用缓冲区的结构上层可以一次就把数据全部传递出去到缓冲区,加快上层呢个组件的处理速度,从而提升整个系统的性能。是不是省时间多了呢。
我们来用代码(IO流)体现一下这个缓冲的效率:
不用缓冲的时候:
一共耗时108ms。
用了缓冲流:
一共耗时31ms
那么说到这里,BufferedWriter有两个构造函数
BufferedWriter(Writer writer),默认创建8KB的缓冲区
BufferedWriter(Writer writer,int size) ,可以自己指定缓冲区的大小,缓冲区的大小需适中,太小起不到作用(哈哈,你可以想一下一个蚊子大的漏斗),太大也会浪费我们系统的资源,增加GC的负担。
缓存是什么?
缓存也是为了提升系统的性能而开辟的一块空间,与缓冲不同的是,缓存是将反复被使用的数据存储起来,供程序直接调用,避免程序反复从数据中读取相同的数据。
在ORM框架中使用很多,Mybatis,Hiberate都有缓存机制。
在缓存区域有的话就直接拿,没有的话就再从 数据库中拿。