【基础巩固篇】Java中的Buffer缓冲区探究

本文介绍了Java中的缓冲区概念,区分了缓冲区与缓存的区别,并详细讲解了Java中的堆内Buffer和堆外Direct Buffer,包括它们的创建、使用方法以及在IO操作中的应用。此外,文章还探讨了Direct Buffer的内存管理和回收机制。
摘要由CSDN通过智能技术生成

作者:不清不慎,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人!

一、什么是缓冲区,与缓存的区别?

首先简单的说下什么是缓存,缓冲的目的的是用来缓解应用程序上下层之间的性能差异,从而提高系统的性能。

缓存是为了提高数据的访问性能,存放经常访问的数据以便于提高系统的性能。

简单来说,而这都是为了提高系统的性能。但是它们之间存在着本质的差别:

  1. 对于缓存它也可以消除上下层之间的速度不匹配的情况,最常见的在我们的计算机中,最早的计算机CPU直接和磁盘进行交互,但是磁盘的发展赶不上CPU的发展速度,为了均衡两者之间访问速度的巨大差异,引入了内存,但是在后来内存的发展赶不上CPU的发展,进而引入了CPU L1缓存,L2缓存,L3缓存等等。在java内部也有缓存,最明显的莫过于HashMap,从其本质出发,缓存的出现不仅是为了缓解上下层速度不匹配的情况,更重要的是它是为了提高读性能。在我们常见的分布式系统中,我们常常需要考虑缓存的架构,比如使用Redis等等,当然,缓存也不能随意使用,需要根据场合仔细考虑,防止出现缓存击穿,缓存穿透,缓存雪崩以及数据不一致性等问题。

  2. 对于缓冲区,我们常常会听说缓冲区溢出这些词,即缓冲区需要考虑合适的大小,过小的缓存达不到缓冲区的效果,过大的内存只会增加系统的资源消耗与回收成本,在java中自带一些Buffer,它方便了开发者的使用,从其本质出现,缓冲区可以协调上下层之间的性能差异,而且也可以提高写性能。当然也可以提高读性能。最为常见的就是当我们在频繁的写数据的时候,经常会设置一些缓冲区,当达到一定大小的时候才会去刷新到磁盘,这样就避免了频繁的直接与磁盘进行操作,增加IO负载,提高系统的性能,很多优秀的开源框架都使用了这一机制。

2.Java中缓冲区的使用

在Java中,它为我们提供了两种类型的Buffer,一种是堆内Buffer,另外一种是堆外(Direct)Buffer。

在java中为我们提供了7个基本的缓冲区,分别由7个类来管理,位于java.nio包下,分为为ByteBuffer,ShortBuffer,IntBuffer,CharBuffer,FloatBuffer,DoubleBuffer,LongBuffer。它们都是抽象类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值