用户工具


消息发送流程

java程序发送一个“hello”到网络上其他主机。步骤如下

  1. 在java内存申请一个内存存放String类型的hello。
  2. socket发送时,先将hello复制到堆外内存(c++程序malloc申请的内存)
  3. 内核将堆外内存的hello发送网卡缓存区

问题来了,内核能访问任意内存。为什么还要由堆内复制到堆外呢

  • 因为堆内内存随时可能做gc,碎片整理。可能当内核要发送的时候,堆内数据已经不再了
  • 所以在做一些io操作时,使用直接内存,就能减少一次copy

发送的时候需要复制到directBuffer