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


    错误信息

    在使用Netty构建Server服务器的时候,之前用得好好的,最近整理了一下就出现了以下错误:

    WARN (AbstractChannelHandlerContext.java:294)- An exception 'java.lang.NullPointerException' [enable DEBUG level for full stacktrace] was thrown by a user handler's 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: 1
    2、Netty中常见的IllegalReferenceCountException异常原因及解决

    原因分析

    从以上的分析文章中发现,SimpleChannelInboundHandler会自动释放内存(虽然这是一种软释放)即是refCnt引用数减一。

    而本人在使用SimpleChannelInboundHandler作为Server端的时候,自己手动释放了一次msg的内存,导致refCnt引用数为0,这个时候框架试图去释放一次,就报如上错误。释放代码如:

    msg.release();

    我都解决方法是删除上面一行代码,然后就不再出现以上错误。

    因此建议全局搜索下release方法,看看是不是重复释放了一次内存造成的该异常,当然前提是你使用了SimpleChannelInboundHandler作为Handler处理事务,使用AbstractChannelInboundHandler是不会主动释放内容的,这个时候需要你自己手动释放一次。

  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业附加
    第三次结构部分作业
    第二次作业
    最后一周作业
    第14,15周作业
    第七周作业
    第六周作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/exmyth/p/14163034.html
Copyright © 2020-2023  润新知