Buffer缓冲区
使用Buffer进行数据写入与获取,需要进行如下四个步骤:
- 将数据写入缓存
- 调用buffer.flip(),转换为读取模式
- 缓冲区读取数据
- 调用buffer.clear()或buffer.compact()清除缓存。
Buffer工作原理
buffer的三个重要属性
- capacity:作为一个内存块,buffer具有固定的大小,也称为“容量”。
- position位置:写入模式时代表写数据的位置,读取模式时代表读取数据的位置。
- limit限制:写入模式,限制等于buffer的容量。读取模式下,limit等于写入的数据量。
ByteBuffer内存类型
建议:
- 性能确实客观的时候才去使用;分配给大型、长寿命;(网络传输、文件读写场景)
- 通过虚拟机参数MaxDirectoryMemorySize限制大小,防止耗尽整个机器的内存。
Channel
SocketChannel
ServerSocketChannel
Selector选择器
实现一个线程处理多个通道的核心概念理解:事件驱动机制。
非阻塞的网络通道下,开发者通过Selector注册对通道感兴趣的我事件类型,线程通过监听事件来触发相应的代码执行。(更底层是操作系统的多路复用机制)
NIO对比BIO
NIO与多线程结合的改进方案
小结