80-10-020-原理-Java NIO-HeapByteBuffer

128 篇文章 426 订阅 ¥49.90 ¥99.00
本文介绍了Java NIO中的两种缓冲区类型:HeapByteBuffer和DirectBuffer。HeapByteBuffer存储数据在JVM堆中,易于创建和释放,但网络传输时需要额外复制。DirectBuffer在堆外直接分配内存,适用于Socket数据传输,性能优异,但内存管理复杂。Netty通过内存池优化了DirectBuffer的使用。对于后端业务消息处理推荐HeapByteBuf,而IO通信推荐使用DirectByteBuf。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.概述

Heap Buffer (堆缓冲区)
这是最常用的类型,ByteBuf将数据存储到JVM的堆空间中,并且将实际的数据存放到byte array中来实现。
优点:由于数据是存储在JVM的堆中,因此可以快速的创建与快速的释放,并且它提供了直接访问内部字节数组的方法。
缺点:每次读写数据时,都需要先将数据复制到直接缓冲区中再进行网络传输。
Direct Buffer (直接缓冲区)
在堆之外直接分配内存空间,直接缓冲区并不会占用堆的容量空间,因为它是由操作系统在本地内存进行的数据分配。
优点:在使用Socket进行数据传递时,性能非常好,因为数据直接位于操作系统的本地内存中,所以不需要从JVM将数据复制到直接缓冲区中,性能很好。
缺点:因为Direct Buffer是直接在操作系统内存中的,所以内存空间的分配与释放要比堆空间更加复杂,而且速度要慢一些。

Netty通提供内存池来解决込个向題。直接緩冲区并不支持通辻字や数組的方式来彷向数据。
重点:对于后端的业务消息的编解码来说,推荐使用HeapByteBuf; 对于I /0通信线程在读写缓冲区时,推荐使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值