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