【发布时间】:2014-04-14 02:19:27
【问题描述】:
我有一个 java 游戏,它在启动时运行至少 94% 的 CPU。考虑到程序只有 124kb,这确实是一个疯狂的数字。可能的问题是它实现了三种线程。
- 作为服务器接收和发送数据包;
- 一个作为客户;
- 和主游戏线程。
可能有很多不同的可能性来解释为什么会出现这种情况,但我的猜测是坚持 Thread 的想法。欢迎提出任何降低此数字的想法和建议,并非常感谢。
CPU:Intel Core 2 Duo,2.66Ghz RAM,2gb。
注意:这发生在许多计算机上,但游戏运行流畅。
编辑:在回复一个答案时,我没有使用任何库,并且我以类似的方式创建了我的线程。客户端和服务器线程如下:
public class Client implements Runnable {
public boolean running;
public DatagramSocket socket;
public Client() {
running = true;
socket = new DatagramSocket(/*whatever params*/);
new Thread(this).start();
}
public void run() {
byte[] data = new byte[1024];
while(running) {
socket.receive(data);
parsePacket(data);
}
}
public void parsePacket(byte[] data) {
// Does all the packet parsing things.
// The client modifies the level.
// The server just spreads things to every client. (could be the server if multiple connections are live?)
}
}
但是,当您检查线程是否被中断时,不是检查是否且仅当线程暂停时吗? - 这就是中断线程的意思,对吧?
在主游戏循环结束时使用Thread.sleep(50) 会有什么好处吗?仍然开放以寻求合理的修复。
【问题讨论】:
-
jvm 在 CPU 消耗较高时创建了多少线程?还可以通过监控 GC 活动来检查 jvm 是否在只做 GC 时保持忙碌
-
大小通常不代表 CPU 负载。
while (true) {}很容易占用 100% CPU!
标签: java multithreading performance cpu-usage