80-10-020-原理-Java NIO-HeapByteBuffer
Posted 九师兄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了80-10-020-原理-Java NIO-HeapByteBuffer相关的知识,希望对你有一定的参考价值。
1.概述
Heap Buffer (堆缓冲区)
这是最常用的类型,ByteBuf将数据存储到JVM的堆空间中,并且将实际的数据存放到byte array中来实现。
优点:由于数据是存储在JVM的堆中,因此可以快速的创建与快速的释放,并且它提供了直接访问内部字节数组的方法。
缺点:每次读写数据时,都需要先将数据复制到直接缓冲区中再进行网络传输。
Direct Buffer (直接缓冲区)
在堆之外直接分配内存空间,直接缓冲区并不会占用堆的容量空间,因为它是由操作系统在本地内存进行的数据分配。
优点:在使用Socket进行数据传递时,性能非常好,因为数据直接位于操作系统的本地内存中,所以不需要从JVM将数据复制到直接缓冲区中,性能很好。
缺点:因为Direct Buffer是直接在操作系统内存中的,所以内存空间的分配与释放要比堆空间更加复杂,而且速度要慢一些。
Netty通提供内存池来解决込个向題。直接緩冲区并不支持通辻字や数組的方式来彷向数据。
重点:对于后端的业务消息的编解码来说,推荐使用HeapByteBuf; 对于I /0通信线程在读写缓冲区时,推荐使用
以上是关于80-10-020-原理-Java NIO-HeapByteBuffer的主要内容,如果未能解决你的问题,请参考以下文章