首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Netty在24分钟内泄漏9 kb内存

使用Netty在24分钟内泄漏9 kb内存
EN

Stack Overflow用户
提问于 2012-11-23 05:05:13
回答 1查看 386关注 0票数 0

9184字节内存在以下代码中泄漏

主类:

代码语言:javascript
复制
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.timeout.IdleStateHandler;
import org.jboss.netty.util.HashedWheelTimer;
import org.jboss.netty.util.Timer;


    public class NettyMemoryLeakTest {

        public static void main(String[] args) {
            final Timer timer = new HashedWheelTimer();
            final IdleStateHandler idle = new IdleStateHandler(timer, 0, 0, 1);
            final ChannelFactory cf = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
            final ServerBootstrap bootStrap = new ServerBootstrap(cf);
            final ServerHandler objServerHandler = new ServerHandler();
            bootStrap.setPipelineFactory(new ChannelPipelineFactory() {
                @Override
                public ChannelPipeline getPipeline() throws Exception {
                    ChannelPipeline pipeline = Channels.pipeline();
                    pipeline.addLast("IDLE", idle);
                    pipeline.addLast("Handler", objServerHandler);
                    return pipeline;

                }
            });

            bootStrap.bind(new InetSocketAddress(8080));

        }
    }

Handler :

代码语言:javascript
复制
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.timeout.IdleState;
import org.jboss.netty.handler.timeout.IdleStateAwareChannelHandler;
import org.jboss.netty.handler.timeout.IdleStateEvent;

public class ServerHandler extends IdleStateAwareChannelHandler {

    @Override
    public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) {
        if (e.getState() == IdleState.ALL_IDLE) {

            System.gc();

        }
    }
}

Am使用jdk 1.7,netty 3.5.8 Final Am通过netbeans分析器检查内存漏洞。它显示了记忆的变化。使用的内存

48分钟后是2020 me ,请帮我找出问题

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-11-23 05:50:09

System.gc()将根本不能保证执行GC。如果您真的认为这是内存泄漏,请使用二进制形式的堆转储,并提供它供检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13523386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档