我知道,对于I/O,直接字节缓冲区在本机堆上分配内存,而ByteBuffer在Java堆上分配内存,因此我们需要从中复制数据java堆到本地堆的I/O操作。为什么无法将数据直接读入地址空间而不是DirectByteBuffer
所以我的问题是,
是JVM的地址空间的直接ByteBuffer部分机堆?
如果不是的话为什么操作系统需要本地堆从套接字读取数据? 为什么不能直接从scoket读取数据到JVM的地址空间?或请求进程的地址空间。
我的目标:我是电子工程师。最近开始在java上开发一个需要最小延迟的项目。我有各种选项,多线程,jvm调优。这些问题是从我的分析中产生的,我会考虑这些选择。
我不得不在这里猜测,但它可能是垃圾收集造成的,也就是说JVM必须能够移动内存以整理其堆释放收集的内存,并且不能让操作系统使用新的这样的操作后的地址。 – Thomas