出现io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1的原因及解决办法

张开发
2026/4/7 12:33:09 15 分钟阅读

分享文章

出现io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1的原因及解决办法
摘自https://www.cnblogs.com/exmyth/p/14163034.html错误信息在使用Netty构建Server服务器的时候之前用得好好的最近整理了一下就出现了以下错误WARN (AbstractChannelHandlerContext.java:294)- An exception java.lang.NullPointerException [enable DEBUG level for full stacktrace] was thrown by a user handlers exceptionCaught() method while handling the following exception: io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1 at io.netty.buffer.AbstractReferenceCountedByteBuf.toLiveRealCnt(AbstractReferenceCountedByteBuf.java:181) at io.netty.buffer.AbstractReferenceCountedByteBuf.release0(AbstractReferenceCountedByteBuf.java:133)分析的文章很多这里有两篇比较靠谱的1、netty的异常分析 IllegalReferenceCountException refCnt: 0, decrement: 12、Netty中常见的IllegalReferenceCountException异常原因及解决原因分析从以上的分析文章中发现SimpleChannelInboundHandler会自动释放内存虽然这是一种软释放即是refCnt引用数减一。而本人在使用SimpleChannelInboundHandler作为Server端的时候自己手动释放了一次msg的内存导致refCnt引用数为0这个时候框架试图去释放一次就报如上错误。释放代码如msg.release();我都解决方法是删除上面一行代码然后就不再出现以上错误。因此建议全局搜索下release方法看看是不是重复释放了一次内存造成的该异常当然前提是你使用了SimpleChannelInboundHandler作为Handler处理事务使用AbstractChannelInboundHandler是不会主动释放内容的这个时候需要你自己手动释放一次。分类: Java

更多文章