交流论坛首页 » 阅读帖子

讨论:服务端防刷元宝、防超载的防刷逻辑该怎么写? - 经验交流

最近排查服务端的内存泄露,用jmap导出了堆内存快照进行分析(jmap -dump:format=b,file=heap.hprof )。导入MAT工具后,发现主要的泄露点在 `L1CharBook` (角色坐标和动作记录)的对象实例上。因为玩家在断开连接时,对应的Book没有从全局的监听器列表中注销,导致虽然玩家离线了,其内存对象依然被垃圾回收器判断为可达,无法被释放。建议大家在 `L1World.getInstance().removeObject(pc)` 方法中加入强制注销逻辑。 关于怪物寻路和仇恨AI的优化,很多开源模拟器都是使用全图广播的线程机制,对CPU开销极大。这里我们将怪物的AI轮询由原来的1秒改为动态心跳:当怪物周围20格内没有在线玩家时,关闭AI轮询;一旦有玩家进入可视视野,立刻唤醒。这样做在怪物数量多达数万只的地图上能显著降低服务端CPU占用率达30%以上。
💬 全部互动回帖 (3)
沙发 🛋️
在线送积分的调度器如果用 Redis 实现,性能会不会比单纯在 JVM 内存中跑更好?
板凳 🪑
收藏了,期待楼主更新后续的客户端 `string-c.tb` 中文化中文字符集解码文章!
地板 🧱
楼主写的 Java Socket 唤醒机制非常好,降低了至少 40% 的 CPU 空载率!
🔒 社区需要注册用户才能发表回复或发帖
立即登录 免费注册