我知道,對於I/O,直接字節緩衝區在本機堆上分配內存,而ByteBuffer在Java堆上分配內存,因此我們需要從中複製數據java堆到本地堆的I/O操作。爲什麼無法將數據直接讀入地址空間而不是DirectByteBuffer
所以我的問題是,
是JVM的地址空間的直接ByteBuffer部分機堆?
如果不是的話爲什麼操作系統需要本地堆從套接字讀取數據? 爲什麼不能直接從scoket讀取數據到JVM的地址空間?或請求進程的地址空間。
我的目標:我是電子工程師。最近開始在java上開發一個需要最小延遲的項目。我有各種選項,多線程,jvm調優。這些問題是從我的分析中產生的,我會考慮這些選擇。
我不得不在這裏猜測,但它可能是垃圾收集造成的,也就是說JVM必須能夠移動內存以整理其堆釋放收集的內存,並且不能讓操作系統使用新的這樣的操作後的地址。 – Thomas