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

  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/smalldong/p/14337528.html
Copyright © 2011-2022 走看看