消息发送流程
java程序发送一个“hello”到网络上其他主机。步骤如下
在java内存申请一个内存存放String类型的hello。
socket发送时,先将hello复制到堆外内存(c++程序malloc申请的内存)
内核将堆外内存的hello发送网卡缓存区
问题来了,内核能访问任意内存。为什么还要由堆内复制到堆外呢
因为堆内内存随时可能做gc,碎片整理。可能当内核要发送的时候,堆内数据已经不再了
所以在做一些io操作时,使用直接内存,就能减少一次copy
发送的时候需要复制到directBuffer