知识卡片

slice与copy的共享隔离取舍

专业/工作 · 1300.b

内容

slice()和duplicate()不复制数据,只是从原ByteBuf切出新视图,与原ByteBuf共享底层内存和引用计数,各自维护独立读写指针,写视图会影响原始数据;copy()把数据、指针完整复制一份,与原ByteBuf彻底独立,修改互不影响。前两者是zero-copy优化,后者是数据隔离时的安全选择。发散:内存共享与指针隔离可正交组合,提示一种思路——共享代价大的资源、隔离代价小的状态。

参考来源

《跟闪电侠学Netty:Netty即时聊天实战与底层原理》第7章《数据载体ByteBuf的介绍》