我创建的ByteBuf通过其Channel
或write
方法发送到writeAndFlush
。
据我所知,在这种情况下,直接缓冲区优于堆缓冲区,因为后者由JVM管理,需要在发送时复制到直接缓冲区。
直接缓冲区不由JVM管理,因此分配大量直接缓冲区可能导致OutOfMemoryError
,正确?
我注意到还有另一种方法ByteBufAllocator.ioBuffer()
该文件说
分配
ByteBuf
,最好是适合的直接缓冲区 I / O。
我想它的运作方式如下:
ByteBufAllocator
管理两个池,一个池用于直接缓冲区,另一个池用于堆缓冲区。如果直接缓冲区中没有足够的空间,则从堆缓冲区分配。 我是对的吗?
ByteBufAllocator
如何确定直接缓冲区的池大小?