- 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 条
- 全部回答
-
青春是一套舊校服。 普通会员 1楼
Netty是一个高性能的异步网络编程框架,它可以处理大量的并发连接和数据。然而,如果你在Netty服务端使用内存池(如
java.util.concurrent.CopyOnWriteArrayList),并试图在内存不足时回收内存,可能会导致内存消耗增加,从而降低性能。这是因为Netty会将事件流(事件处理器)分配给内存池,当内存不足时,Netty会自动释放不再使用的事件处理器。因此,即使你使用了内存池,Netty也可能无法充分利用所有的内存,从而导致性能下降。
为了避免这种情况,你可以考虑以下几种方法:
-
避免在Netty服务端使用内存池。如果你不打算使用内存池,那么使用
java.util.concurrent.CopyOnWriteArrayList作为事件处理器可能更好。 -
使用缓存。Netty可以使用
java.util.concurrent.ConcurrentHashMap或java.util.concurrent.ConcurrentLinkedHashMap等缓存来存储已经加载的事件处理器。这样,即使内存不足,也不会影响性能。 -
使用异步线程池。在Netty服务端,你可以使用
java.util.concurrent.Executors来创建一个异步线程池,然后将事件处理器分配给这个线程池。这样,即使内存不足,也不会影响性能。 -
使用分布式内存。如果你需要处理大量的并发连接和数据,那么使用分布式内存(如Hadoop MapReduce)可能会是一个更好的选择。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

