zoukankan      html  css  js  c++  java
  • 缓冲和缓存的区别

    引自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

  • 相关阅读:
    JD20 紧急疏散
    排序-归并
    排序:快排
    剑指offer-二叉树镜像
    美的笔试--分糖果
    centos限定端口访问
    javascript中使用ajax异步验证数据库后方法return true时总是返回undefined
    javascript自定义startWith()和endWith()方法
    jsp <input type="file"> 清空value值的一种方式
    Could not initialize class sun.awt.X11GraphicsEnvironment
  • 原文地址:https://www.cnblogs.com/smalldong/p/14337528.html
Copyright © 2011-2022 走看看