0

私は、音楽プレーヤーとゲームの2つのスレッドだけで非常に単純なJava2Dゲームをコーディングしました。ゲームを開始したときに、CPU使用率が20%の範囲から70%の範囲に急上昇していることに気付きました。ゲームで必要な処理の多くはまだ実装されていません!

  1. これは懸念事項ですか?-単純なゲームはCPUをそれほど消費しないのではないでしょうか?

  2. それが懸念事項である場合; (マルチスレッドがないことを除いて)使用率の大幅な飛躍を回避するための一般的なコーディング手法またはデザインパターンは何ですか?

4

5 に答える 5

3

これは懸念事項ですか?-単純なゲームはCPUをそれほど消費しないのではないでしょうか?

何もしないだけでCPU全体を占有する可能性があります(例:このコード

  public static void main( String[] args ) {
    while( true ){

    }
  }

私のPCで100%のCPU使用率を示しています。したがって、「単純な」ゲームはあまり効果がないかもしれませんが、実装が不適切な場合は、確かに大量のCPUパワーを使用する可能性があります。

プロファイリングツール(JProfilerなど)を使用すると、CPUがどこに行くのかを判断するのに役立ちます。無料のプロファイラーも利用できるかどうかわからない。ただし、 JConsoleVisualVM (通常は両方ともJDKに含まれています)などの無料ツールも、どちらThreadがアクティブでCPUの大部分を占めているかをすばやく確認するのに役立ちます。

于 2012-07-20T18:54:02.287 に答える
2

それが懸念事項である場合; (マルチスレッドがないことを除いて)使用率の大幅な飛躍を回避するための一般的なコーディング手法またはデザインパターンは何ですか?

ほとんどのゲームエンジンには、1秒間に60回呼び出されるゲームロジック更新関数と、コンピューターにリソースがあるのと同じ頻度で呼び出される描画関数があります(ただし、ロジック更新以下)。

ここでの一般的なコーディング方法は、必要以上にゲームを更新したくないということです。メインループにカウンターを配置して、10秒間に何回呼び出されるかを確認してみてください。1秒間に60を超える更新を実行している場合は、このCPU負荷は必要ありません。

これを提供するゲームエンジンを使用していないように見えるので、解決策を一緒にハックすることができます。メインwhileループに現在の時刻を見つけてDateTimeもらい(Javaはミリ秒の精度を提供しますが、十分です)、それを最後のループの更新時刻。十分な時間が経過していない場合はThread.sleep()、ゲームが次の反復の実行を待機している間、CPUの負担を取り除くために使用してください。

最後のコメント:

(マルチスレッドなしを除く)

CPUスイッチスレッドを使用するとオーバーヘッドが少し発生しますが、適切に記述されたスレッドを多く使用してもCPUの動作が難しくなるとは思いません(作業の合計はスレッドが少ない場合と同じだと思います)。実際、マシンがマルチコアの場合、CPUが必要な部分があれば、ゲームの動作が速くなります(スレッドが互いにブロックするのではなく、並行していると仮定します)。

于 2012-07-20T20:25:24.463 に答える
1

ここでの答えは、プログラムを測定し、CPUが期待どおりに使用されていることを確認することです。あなたがそれを測定するとき、あなたは驚くべき何かを見つけるでしょう。これを行うための優れたJavaプロファイラーが市場に数多く出回っています。とても満足しているJProfilerを使用しています。これを行う貧乏人の方法は、pstackを使用してJavaスレッドダンプを取得することです。いくつかのダンプを取り、それが何をしているのかを見てください。または、IDEでデバッグして、さまざまな時点で中断します。

于 2012-07-20T18:32:27.023 に答える
1

CPUとメモリ使用率を見つける最良の方法は、jconsoleやjvisualvmなどのプロファイラーを使用することです。

あなたはあなたのjdkで同じものを見つけることができます

C:〜/ jdk / bin / jconsoleまたはC:〜/ jdk / bin / jvisualvm

CPUピークが高くなると、対応するスタックフレームが使用されます。CPUがより多く使用されている現在実行中のラインを確認できます。

アプリケーションのプロファイルを作成し、スレッド数のベンチマークを行ってください。

于 2012-07-20T19:53:10.387 に答える
0

アプリケーションのCPUとメモリのプロファイルを作成して、効率を向上させるためにアプリケーションが何をしているのかを確認します。

于 2012-07-20T18:32:25.530 に答える