由于高性能服务一般使用c/c++开发而c/c++可以直接使用操作系统的异步IO所以java nio发展受到一定影响。
在java nio中多了 selector多路复用器,channel,缓冲区的概念(netty权威指南)
- selector
- channel
- 缓冲区
- 直接内存:
在JDK1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。
从数据流的角度,来看
非直接内存作用链:
本地IO –>直接内存–>非直接内存(堆内存)–>直接内存–>本地IO
直接内存作用链:
本地IO–>直接内存–>本地IO(https://blog.youkuaiyun.com/leaf_0303/article/details/78961936)