JDK 17的外部存储器访问和Nio通道异步化 – Inside.java


当前Java平台的NIO通道仅支持同步通道上的I / O操作,这些通道具有在受限内存段上的字节缓冲区视图。尽管有一定的局限性,但这反映了一种实用的API约束解决方案,同时推动了外部存储器访问API本身的设计。
随着外部内存访问API的最新发展(针对JDK 17),内存段的生命周期被推迟到更高级别的抽象(资源范围)。资源范围管理一个或多个内存段的生命周期,并具有几个不同的特征。我们将详细研究这些特性,但是最值得注意的是,现在有一种方法可以使共享内存段在一段时间内不可关闭。鉴于此,我们可以重新审视当前可用于NIO通道的内存段种类以及可以使用段视图的通道种类的限制。
本文章介绍了资源范围抽象,描述了它的特性,最后介绍了如何利用它来提供与不同种类的NIO通道更好的互操作性。尽管许多细节是特定于NIO通道的,但此处描述的许多关注点和方法都足够通用,因此也可以应用于其他使用字节缓冲区的低级框架或库。
NIO通道分为两大类,它们执行(读/写)I / O操作:

  1. 同步通道-DatagramChannel,FileChannel,SocketChannel
  2. 异步通道-AsynchronousFileChannel,AsynchronousSocketChannel

JDK 17中的外部存储器访问API增强,最显着的是资源范围抽象,极大地改善了内存段和NIO通道上字节缓冲区视图的互操作性。NIO通道实现现在可以支持所有字节缓冲区视图,这些视图在逻辑上适用于该通道提供的编程模型。
详情点击标题