Java ChannelInboundHandlerAdapter writeAndFlush(msg)方法在刷新后是否释放msg?

Java ChannelInboundHandlerAdapter writeAndFlush(msg)方法在刷新后是否释放msg?,java,networking,tcp,netty,handler,Java,Networking,Tcp,Netty,Handler,我正在使用ChannelInboundHandlerAdapter类并编写和刷新来自channelRead()的每条消息 在这种情况下:Netty是否释放“frame”和“msg”。我知道它们是引用计数对象,因此当我尝试手动释放它们时,如下所示: public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf)msg; Binary

我正在使用ChannelInboundHandlerAdapter类并编写和刷新来自channelRead()的每条消息

在这种情况下:Netty是否释放“frame”和“msg”。我知道它们是引用计数对象,因此当我尝试手动释放它们时,如下所示:

public void channelRead(ChannelHandlerContext ctx, Object msg) throws  Exception { 
    ByteBuf buf = (ByteBuf)msg;
    BinaryWebSocketFrame frame= new BinaryWebSocketFrame(buf);
    ctx.writeAndFlush(frame);
    buf.release();
    frame.release();
}
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
但在这种情况下,我得到了refCounted对象释放错误,如下所示:

public void channelRead(ChannelHandlerContext ctx, Object msg) throws  Exception { 
    ByteBuf buf = (ByteBuf)msg;
    BinaryWebSocketFrame frame= new BinaryWebSocketFrame(buf);
    ctx.writeAndFlush(frame);
    buf.release();
    frame.release();
}
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
起初,我依赖netty发布相关实例,但它偶尔会在运行时给我内存泄漏错误


在这种情况下,如何减少内存使用,因为在每个channelRead事件中创建新实例并不是一个好主意,因为您无法正确释放它们。

是的,如果您调用
writeAndFlush(…)
您基本上是在转移缓冲区的所有权。如果写入缓冲区或写入失败,Netty本身将释放缓冲区。

是的,如果调用
writeAndFlush(…)
您基本上是在转移缓冲区的所有权。如果写入缓冲区或写入失败,Netty本身将释放缓冲区。

BinaryWebSocketFrame实例如何?它也发布了吗?或者我应该显式地释放它吗?实现ReferenceCounted的所有内容都将被释放BinaryWebSocketFrame实例如何?它也发布了吗?或者我应该明确地发布它吗?所有实现了ReferenceCounted的内容都将被发布