Per*_*hau 4 java eclipse multithreading jvisualvm awt-eventqueue
在我正在开发的游戏中,我遇到了一些最近的滞后峰值.它是一致的,大约在同一时间发生.使用java profiler jvisualvm我发现它发生在特定线程似乎重启或同时(AWT-EventQueue-0):

除此之外,没有明显的原因,不是堆使用,处理器使用,内存空间或方法使用.它有时会导致ConcurrentModificationException绘制我的对象数组时,但这应该只会发生很大的延迟,而且我的游戏几乎没有密集.
我不记得最近对该项目进行了任何更改,但是我最近进行了以下操作:
我在32位XP上运行Eclipse Indigo-service-1.我的处理器几乎没用过.
看起来你在Event Dispatch Thread(EDT)上做得太多了.AWT-Event-Queue-0看起来像是EDT.另外,你的上一条评论说
...当我将游戏板首先绘制到图像而不是直接绘制到组件时,似乎只出现滞后峰值.
你需要将一些计算推送到其他线程,听起来像绘制游戏板是一个很好的选择.此外,你可能有任何人工智能.
键盘和鼠标处理程序在EDT上运行,图形更新也需要.但是您可以在EDT之外预渲染到图像(就像您当前正在做的那样).您可以通过BlockingQueue将键盘和鼠标事件发送到另一个线程.
您可以做的另一件事是将游戏更新率与帧更新率分开.
但没有任何细节,我不能给出更多的建议.
更新 :(只是看看你的位ConcurrentModificationException)
这可能是由两件不同的事情造成的:
第2点很容易修复; 但我担心我不能在如此短的空间内教授线程安全.
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |