账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    使用netty服务端,内存为啥不降?
    34
    0

    protected void initChannel(SocketChannel socketChannel) throws Exception {

                    // 增加任务处理  
                    ChannelPipeline p = socketChannel.pipeline();
                    p.addLast(e1,new NettyServerHandler());
                }
                这段代码中。new了一个handler类。当我对这个netty服务端,进行1000并发压力测试时,内存增高,当我断开连接时,内存还是连接时候那么多,没有下降,请问是不是这反复new对象之后没进行内存释放?如果是,如何释放?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • Netty是一个高性能的异步网络编程框架,它可以处理大量的并发连接和数据。然而,如果你在Netty服务端使用内存池(如java.util.concurrent.CopyOnWriteArrayList),并试图在内存不足时回收内存,可能会导致内存消耗增加,从而降低性能。

      这是因为Netty会将事件流(事件处理器)分配给内存池,当内存不足时,Netty会自动释放不再使用的事件处理器。因此,即使你使用了内存池,Netty也可能无法充分利用所有的内存,从而导致性能下降。

      为了避免这种情况,你可以考虑以下几种方法:

      1. 避免在Netty服务端使用内存池。如果你不打算使用内存池,那么使用java.util.concurrent.CopyOnWriteArrayList作为事件处理器可能更好。

      2. 使用缓存。Netty可以使用java.util.concurrent.ConcurrentHashMapjava.util.concurrent.ConcurrentLinkedHashMap等缓存来存储已经加载的事件处理器。这样,即使内存不足,也不会影响性能。

      3. 使用异步线程池。在Netty服务端,你可以使用java.util.concurrent.Executors来创建一个异步线程池,然后将事件处理器分配给这个线程池。这样,即使内存不足,也不会影响性能。

      4. 使用分布式内存。如果你需要处理大量的并发连接和数据,那么使用分布式内存(如Hadoop MapReduce)可能会是一个更好的选择。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部