get() 和 set() 操作, 从给定的索引开始, 并且保持索引不变
read() 和 write() 操作, 从给定的索引开始, 并且会根据已经访问过的字节数对索引进行调整
在 ChannelHandler 被添加到 ChannelPipeline 中或者被从 ChannelPipeline 中移除时会调用这些操作
当某个 ChannelInboundHandler 的实现重写 channelRead() 方法时,
它将负责显式地释放与池化的 ByteBuf 实例相关的内存
-- ReferenceCountUtil.release()
SimpleChannelInboundHandler 会自动释放资源
所以不应该存储指向任何消息的引用供将来使用, 因为这些引用都将会失效
class ResourceLeakDetector : 诊断潜在的 (资源泄漏) 问题
修改netty泄漏检测级别
java -Dio.netty.leakDetectionLevel=ADVANCED
虽然池化和重用线程相对于简单地为每个任务都创建和销毁线程是一种进步,
但是它并不能消除由上下文切换所带来的开销, 其将随着线程数量的增加很快变得明显,
并且在高负载下愈演愈烈