Netty 严重:泄漏:在它之前未调用ByteBuf.release();垃圾被收集了。内蒂

Netty 严重:泄漏:在它之前未调用ByteBuf.release();垃圾被收集了。内蒂,netty,Netty,我已经创建了一些游戏服务器,我刚刚和大约10个伙伴测试了它。一切都很顺利,我们玩了大约10分钟,在游戏的某个时候,游戏服务器停止服务客户端,断开了所有人的连接,还有我连接到运行游戏的VPS的SSH也断开了连接(我不知道为什么),但在断开连接之前,我总是收到以下消息: Sep 20, 2017 5:14:11 PM io.netty.util.ResourceLeakDetector reportUntracedLeak SEVERE: LEAK: ByteBuf.release() was no

我已经创建了一些游戏服务器,我刚刚和大约10个伙伴测试了它。一切都很顺利,我们玩了大约10分钟,在游戏的某个时候,游戏服务器停止服务客户端,断开了所有人的连接,还有我连接到运行游戏的VPS的SSH也断开了连接(我不知道为什么),但在断开连接之前,我总是收到以下消息:

Sep 20, 2017 5:14:11 PM io.netty.util.ResourceLeakDetector reportUntracedLeak
SEVERE: LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak reporting to find out where the leak occurred. To enable advanced leak reporting, specify the JVM option '-Dio.netty.leakDetection.level=advanced' or call ResourceLeakDetector.setLevel() See http://netty.io/wiki/reference-counted-objects.html for more information.
我需要调试并了解这条消息的真正含义,这个错误的方向是什么

我真的不知道我的代码需要哪一部分来理解它

private void decodeData(ChannelHandlerContext ctx, ByteBuf buffer, List<Object> out) {
    if (buffer.readableBytes() >= length) {
        ByteBuf data = buffer.readBytes(length);
        out.add(new Packet(opcode, data));
        setState(PacketDecodeState.OPCODE);
    }
}
私有无效解码数据(ChannelHandlerContext ctx、ByteBuf缓冲区、列表输出){
if(buffer.readableBytes()>=长度){
ByteBuf data=buffer.readBytes(长度);
添加(新数据包(操作码、数据));
setState(PacketDecodeState.OPCODE);
}
}

读取完数据后,我不会调用
buffer.release()
,因为这样它就不会真正处理任何数据包,只是一种错误的行为,而且我确信将其放在那里是错误的。

由于您的
数据包
包含对新创建的
ByteBuf
的引用,您需要确保调用
ByteBuf.release()
否则会造成内存泄漏