在使用 JProfiler 和 YourKit 分析 Java 应用程序后,我看到了访问 Long to Object Map 的多种方法,我们使用 fast util 的 map 来实现高吞吐量,而数组很慢。应用程序在一个滴答声环境中运行,如果你愿意,一个游戏循环会在线程上的每个滴答声之间暂停 50 毫秒。每次滴答,实体的位置都会从带有它们的块位置的地图中抓取,但是抓取这些数据会以某种方式产生 200 毫秒以上的延迟峰值。有什么方法可以优化地图查找/实时实体位置抓取?我尝试在实体对象中本地存储一个块以避免访问地图,但这会创建更多内存(我们有 8k+ 个实体被勾选)并且可能会泄漏。
我们目前有一个带有多人客户端的服务器游戏循环的实现。数据包与游戏机制(碰撞、实体滴答)一起在单个线程上进行处理。我们尝试接近多线程环境,但这会产生大量需要锁定和同步技术的竞争条件,这总体上会减慢滴答循环并使用内核中的大量 CPU。单线程运行良好;但是,大部分延迟来自地图查找、数组查找、碰撞对象创建和实体移动等。您知道优化这些循环的任何好主意吗?