课件和 Demo 地址
https://gitee.com/geektime-geekbang/geek_netty
作者回复: 你打卡打的真心不错!
作者回复: 1 应该释放,你没有看到释放,是因为在它继承的父类中: MessageToMessageDecoder#channelRead try { decode(ctx, cast, out); } finally { ReferenceCountUtil.release(cast); } 2 没有效果,因为它的实现是这样的: if (msg instanceof ReferenceCounted) { return ((ReferenceCounted) msg).release(); } 好处就是不用管这些细致末节了,直接release,需要release的会释放,不需要的(没有实现ReferenceCounted)不释放。所以对我们来说省心友好。
作者回复: 是的,因为finally语句中会尝试释放,但是肯定不执行释放因为释放的时候会判断: public static boolean release(Object msg) { if (msg instanceof ReferenceCounted) { return ((ReferenceCounted) msg).release(); } return false; }