有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java泄漏:ByteBuf。release()在垃圾收集之前没有被调用,尽管我调用了。释放

有时,尽管我调用,但仍会出现此错误。有人能解释一下吗

提前谢谢

这是我的密码

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {

    ByteBuf in = (ByteBuf) msg;
    try {


        if (in != null) {
               port = parseProxyline(in.copy());//According to the error log here occurs the leak 

            if (port != 0) {
                new ProxyRemoteConn(port, in.copy(), ctx);
            }
        }
    } finally {
        in.release();
    }


}

还有错误消息

LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.
Recent access records: 
Created at:
    io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:402)
    io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:188)
    io.netty.buffer.UnsafeByteBufUtil.copy(UnsafeByteBufUtil.java:436)
    io.netty.buffer.PooledUnsafeDirectByteBuf.copy(PooledUnsafeDirectByteBuf.java:216)
    io.netty.buffer.AbstractByteBuf.copy(AbstractByteBuf.java:1194)
    ProxyOutgoingChannelHandler.channelRead(ProxyOutgoingChannelHandler.java:50)
    io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
    io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795)
    io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:480)
    io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378)
    io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
    io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    java.base/java.lang.Thread.run(Thread.java:829)

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

此代码用于读取标头内添加行中的端口,然后打开与该端口的新连接


共 (1) 个答案

  1. # 1 楼答案

    调用ByteBuff.copy()时,您正在创建一个新的ByteBuff实例,该实例也必须被释放