交流论坛首页 » 阅读帖子

[优化] `char_items`数据回滚的设计与实现方案

最近排查服务端的内存泄露,用jmap导出了堆内存快照进行分析(jmap -dump:format=b,file=heap.hprof )。导入MAT工具后,发现主要的泄露点在 `L1CharBook` (角色坐标和动作记录)的对象实例上。因为玩家在断开连接时,对应的Book没有从全局的监听器列表中注销,导致虽然玩家离线了,其内存对象依然被垃圾回收器判断为可达,无法被释放。建议大家在 `L1World.getInstance().removeObject(pc)` 方法中加入强制注销逻辑。 关于怪物寻路和仇恨AI的优化,很多开源模拟器都是使用全图广播的线程机制,对CPU开销极大。这里我们将怪物的AI轮询由原来的1秒改为动态心跳:当怪物周围20格内没有在线玩家时,关闭AI轮询;一旦有玩家进入可视视野,立刻唤醒。这样做在怪物数量多达数万只的地图上能显著降低服务端CPU占用率达30%以上。 修改客户端UI图片,建议使用 `L1Dec` 或者是 `SpriteReader` 软件。提取出 `Sprite.bin` 文件后,可以根据编号找到对应的贴图索引。需要注意的是,变身动作通常有16个朝向,每个朝向对应有攻击、行走、施法等8套连续动作,如果只替换了其中一部分纹理,就会导致在特定角度下人物显示成透明或者直接闪退(Missing Sprite Error)。
💬 全部互动回帖 (3)
沙发 🛋️
之前直接用 ParallelGC 每次 GC 时整个服都会卡顿一两秒,现在换成 G1GC 丝滑顺畅了。
板凳 🪑
请教下楼主,在 7.6C 版本中,Packet的加密秘钥结构是不是有所变化?
地板 🧱
魔法防御 MR 因子加入圣结界的想法非常棒,游戏平衡性极大地提升了。
🔒 社区需要注册用户才能发表回复或发帖
立即登录 免费注册