Java Virtual Machineで時間を遅くすることができますか?
質問
OpenJDKのソースコードを変更することにより、CPUの使用に従ってJava仮想マシンの時間を遅くすることは可能ですか?私は、壁の時計にゆるく同期してリアルタイムで消費するネットワークシミュレーション(JavaからNS-3)を持っています。ただし、シミュレーションで非常に多くのクライアントを実行しているため、CPU使用量は100%に達し、シミュレーターのイベントが処理する時間については維持されていません(つまり、大量の超高レートイベント)。したがって、シミュレーションは、ネットワークトラフィックが多数ある場合、約40ノードで締めくくりますが、それでも少し不明瞭です。理想的な解決策は、CPUによると時間を遅くすることですが、これをうまく行う方法はわかりません。より少ない解決策は、いくつかの複数の(時間のレンズ?)だけで時間を短縮することです。
誰かが何らかのガイダンスを提供できれば、問題の関連ファイルのソースコード(Windowsの)は http://pastebin.com/rsqpcdbd. 。ファイルの一部を変更しようとしましたが、結果はあまり成功していません。
前もって感謝します、
クリス
解決
あなたは見るかもしれません VirtualBox
, 、それを許可します ゲストクロックを加速または遅くします コマンドラインから。
他のヒント
これがあなたが望むものであるかどうかは完全にはわかりませんが、 ジョーダタイム ライブラリあなたは時間を完全に止めることができます。したがって、Joda-Time内のnew Date()またはnew DateTime()への呼び出しは、継続的に同じ時間を返します。
したがって、この呼び出しで1つのスレッド「停止時間」でできます。
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());
その後、スレッドは5000msのために眠ることができます。
// advance time by one second
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis() + 1000);
そのため、システム内の時間に基づいてアプリケーションが行うことは何でもしている場合は、5秒ごとに時間を1秒前に設定することで「遅い」時間になります。
しかし、私が言ったように...これがあなたの環境で機能するかどうかはわかりません。