0
我使用ChannelInboundHandlerAdapter類和writeAndFlush來自channelRead()的每條消息;ChannelInboundHandlerAdapter writeAndFlush(msg)方法在刷新後會釋放msg嗎?
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf msgBuffer = (ByteBuf)msg;
BinaryWebSocketFrame frame= new BinaryWebSocketFrame(msgBuffer);
ctx.writeAndFlush(frame);
}
在這種情況下: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
起初,我靠網狀它釋放的相關情況,但它給了我的內存泄漏錯誤運行時偶爾。
如何減少這樣的情況下,內存使用,因爲在每一個channelRead事件創建新實例是不是當你不能正確地釋放他們好主意。
BinaryWebSocketFrame實例呢?它也發佈了嗎?或者我應該明確地發佈它? –
實現了ReferenceCounted的所有內容都將被髮布 –