1

OpenJDKのソースコードを改変することで、CPU使用率に応じてJava仮想マシンの時間を遅くすることはできますか? 私はネットワーク シミュレーション (Java から ns-3) を持っています。これはリアルタイムを消費し、壁の時計と緩やかに同期しています。ただし、シミュレーションで非常に多くのクライアントを実行しているため、CPU 使用率が 100% に達し、シミュレーターでのイベントの処理にかかる時間 (つまり、大量の超遅延イベント) についての厳密な保証が維持されません。したがって、ネットワーク トラフィックが多い場合、シミュレーションは約 40 ノードで最高になり、それでも少し不安定です。理想的な解決策は、CPU に応じて時間を遅くすることですが、これをうまく行う方法がわかりません。より少ない解決策は、時間を数倍遅くすることです(タイムレンズ?)。

誰かが何らかのガイダンスを提供できる場合、問題の関連ファイルのソース コード (Windows 用) はhttp://pastebin.com/RSQpCdbDにあります。ファイルの一部を変更しようとしましたが、結果はあまりうまくいきませんでした。

前もって感謝します、
クリス

4

2 に答える 2

1

を参照すると、コマンド ラインからゲスト クロックを加速または減速VirtualBoxできます。

于 2011-05-01T23:19:54.770 に答える
0

これがあなたが望むものかどうかは完全にはわかりませんが、Joda-timeライブラリを使用すると、時間を完全に停止できます。そのため、Joda-time 内で new Date() または new DateTime() を呼び出すと、継続的に同じ時刻が返されます。

したがって、次の呼び出しを使用して、1 つのスレッドで「時間を停止」することができます。

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

次に、スレッドをたとえば 5000 ミリ秒スリープさせてから、次のように呼び出します。

// advance time by one second
DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis() + 1000);

したがって、アプリケーションがシステム内の時間に基づいて何をしていても、5 秒ごとに 1 秒進むように設定することで時間が「遅く」なります。

しかし、私が言ったように...これがあなたの環境でうまくいくかどうかはわかりません。

于 2011-05-01T21:32:25.290 に答える