缓冲和缓存的区别

引自B站楠哥:https://www.bilibili.com/video/BV1TK4y1s7Nb

一、缓冲buffer

缓冲的作用就是协调上下层应用之间的性能差异,提升系统性能。

缓冲.png

通过缓冲区的缓冲,当上层组件的性能优于下层组件的时候,缓冲可以有效的减少上层组件对下层组件等待的时间。

基于这样的结构,上层组件不需要等待下层组件完全接收全部数据,即可返回进行其他操作,加快了上层组件的处理速度,从而提升整个系统的性能。

不使用缓冲区

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class NoBufferTest {
    public static void main(String[] args) {
        Writer writer=null;
        try {
            writer= new FileWriter("E:\file.txt");
            long num=100000;
            long beginTime=System.currentTimeMillis();
            for (int i = 0; i < num; i++) {
                writer.write(i);
            }
            long endTime=System.currentTimeMillis();
            System.out.println("未使用缓冲区耗时:"+(endTime-beginTime)+"ms");//未使用缓冲区耗时:25ms
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

使用缓冲区

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class BufferTest {
    public static void main(String[] args) {
        Writer writer = null;
        BufferedWriter bufferedWriter = null;
        try {

            writer = new FileWriter("E:\file.txt");
            bufferedWriter = new BufferedWriter(writer);
            long num = 100000;
            long beginTime = System.currentTimeMillis();
            for (int i = 0; i < num; i++) {
                bufferedWriter.write(i);
            }
            long endTime = System.currentTimeMillis();
            System.out.println("使用缓冲区耗时:" + (endTime - beginTime) + "ms");//使用缓冲区耗时:13ms
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bufferedWriter.close();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
BufferedWriter有两个构造器
BufferedWriter(Writer writer);//默认创建8kb的缓冲区    private static int defaultCharBufferSize = 8192;
BufferedWriter(Writer writer, int size);//自己指定缓冲区大小,指定的时候需要适中,太小起不到缓冲作用,太大会浪费系统资源,增加GC的负担。

二、缓存cache

还层缓存也是为了提升系统性能而单独开辟的一块空间,和缓冲不同的是,缓存是把反复使用的数据存储起来,供程序直接使用,避免程序反复从数据库中读取相同的数据。

在ORM框架中使用很多,MyBatis,Hibernate等都有缓存机制。

缓存.png

原文地址:https://www.cnblogs.com/smalldong/p/14337528.html