-5

これは非常に特殊な質問です。この Java プログラムを実行するときに多くのラグを作成する最善の方法を考えています。コンピューターの速度に関係なく、プログラムが停止するまで、この Java プログラムが迷惑なプロセッサ ラグを引き起こすようにしたいと考えています。これを達成することはどのように保証されますか? 最も効率的な方法は何ですか?

これまでのところ、私が適度に成功しているのは

while (true) {}

しかし、それでもユーザーのコンピューターが高速な場合、信頼できない場合があります。

これを使用して、コンピューターのグループがどれだけ処理できるかについて科学実験を行っています。

4

3 に答える 3

0

現在のスレッドをスリープ状態にすることもできます。これはラグを作成しませんが、プログラムにその効果を与えます。

try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

詳しくは

于 2013-10-17T01:12:21.910 に答える
0

私が最近投稿した、一貫性のある GC チャーンを発生させるためのテクニック に対処するユーティリティを高く評価するかもしれません。このユーティリティを使用して、ベンチマーク中にシステムの負荷をシミュレートします。これは、あなたがしようとしていることと非常によく似ています。

一定期間、またはバックグラウンドで継続的に多数のオブジェクトを作成および破棄し、JVM にさまざまな量の負荷をかけるように構成できます。一度に複数を実行して、余分な平均を試してみてください:)

完全なコードは、GC Churn Gistで入手できます。

于 2013-10-17T01:13:58.403 に答える
0

あなたが何を望んでいるのか正確に理解しているかどうかはわかりませんが、単一のスレッドと無限の空のループを使用してそれを取得することはまずありません。まず、そのプログラムは多くても 1 つのシステム スレッドを使用するため、1 つの CPU コアを使用します。次に、ホットスポット コンパイラは、空のループ (または、使用されない変数への算術演算または代入) を最適化する可能性があります。したがって、達成したいことが何であれ、オプティマイザーが改善しようとしない何かを行う必要があります。そう...

(コンピュータではなく) プログラムの実行を遅くしたい場合は、Thread.sleep(1000) の周りに広げてください。JVM はその時間を OS に返します。

外部イベントを待機している間に JVM に何らかの作業を行わせることが意図されている場合 (「システムのボゴミの計算」など)、オプティマイザが不要な変数を削除しないように、副作用のあるコードを実行する必要があります。割り当て。たとえば、配列に対していくつかの算術演算を実行してから、その配列の値を System.out.print() (またはその他...) に実行できます。ただし、プロセスは依然として 1 つのスレッドに制限されていることに注意してください。また、プロセスが長時間 IO 操作を実行しない場合、オペレーティング システムによって優先順位が下げられる可能性が高いため、そのタイプのスレッドにあまり信頼性を期待しないでください。測定技術。

システム全体の停止を検討している場合は、いくつかのスレッドを実行し、それらに集中的なメモリ割り当て、IO 操作、または外部プログラムの実行を行わせる必要があります。たとえば、何千ものスレッドを実行し、それぞれが巨大なバッファを割り当てる外部Javaプログラムを実行するループを実行し、そのバッファの内容をファイルに書き込むことができます...まあ、あなたはアイデアを得る;)

于 2013-10-17T01:48:33.760 に答える