我正在使用 Java 开发一个动作平台游戏,最近刚刚完成了一个敌方单位的 AI 编码。我开始注意到在游戏中的某些时刻,它会在恢复正常之前减速和滞后。在此视频中查看示例。滞后部分位于视频的中点,并带有注释,因此您不会错过它:
我猜想它尝试执行的某些代码会成为瓶颈。这通常是内存问题还是 CPU 问题的症状?
更重要的是,在这种情况下,确定有问题的代码是什么以便我分析如何优化它的最佳方法是什么?我只用于 Java 的唯一优化工具是 jvisualvm,我只使用了一段时间。这会在这种情况下起到作用吗?
我正在使用 Java 开发一个动作平台游戏,最近刚刚完成了一个敌方单位的 AI 编码。我开始注意到在游戏中的某些时刻,它会在恢复正常之前减速和滞后。在此视频中查看示例。滞后部分位于视频的中点,并带有注释,因此您不会错过它:
我猜想它尝试执行的某些代码会成为瓶颈。这通常是内存问题还是 CPU 问题的症状?
更重要的是,在这种情况下,确定有问题的代码是什么以便我分析如何优化它的最佳方法是什么?我只用于 Java 的唯一优化工具是 jvisualvm,我只使用了一段时间。这会在这种情况下起到作用吗?
分析中的一个常见问题是,您有一个通常在可接受的时间内执行的方法,但每隔一段时间就会成为瓶颈。
分析整个运行可能对您没有帮助,因为一个缓慢的调用将被所有其他常规调用淹没。
在JProfiler中,您可以标记一个方法,以便单独保存异常方法运行,您可以详细检查最慢的操作。您可以使用方法统计视图查看调用分布并将它们标记为异常方法记录:

在调用树视图中,最慢的调用将标有 [异常运行] 后缀,您可以单独调查它们的调用树:

免责声明:我公司开发 JProfiler。