Frage

Ist es möglich, die Zeit in der java virtuellen Maschine gemäß der CPU -Verwendung durch Änderung des Quellcode von OpenJDK zu verlangsamen? Ich habe eine Netzwerksimulation (Java zu NS-3), die Echtzeit verbraucht und lose zur Wanduhr synchronisiert ist. Da ich in der Simulation so viele Kunden betreibe, wird die CPU-Nutzung zu 100% getroffen und harte Garantien werden nicht darüber aufrechterhalten, wie lange Ereignisse im Simulator dauern sollten (dh eine hohe Anzahl von Super-Late-Ereignissen). Daher ist die Simulation bei rund 40 Knoten überragt, wenn viel Netzwerkverkehr vorhanden ist, und selbst dann ist sie ein bisschen zweifelhaft. Die ideale Lösung wäre, die Zeit laut CPU zu verlangsamen, aber ich bin mir nicht sicher, wie dies erfolgreich erledigt werden soll. Eine geringere Lösung besteht darin, die Zeit um einiges zu verlangsamen (Zeitlinsen?).

Wenn jemand eine Anleitung geben könnte, ist der Quellcode für die betreffende Datei (für Windows) bei http://pastebin.com/rsqpcdbd. Ich habe versucht, einige Teile der Datei zu ändern, aber meine Ergebnisse waren nicht wirklich sehr erfolgreich.

Danke im Voraus,
Chris

War es hilfreich?

Lösung

Sie könnten sich ansehen VirtualBox, was es einem erlaubt, zu Beschleunigen oder verlangsamen Sie die Gastuhr Aus der Befehlszeile.

Andere Tipps

Ich bin mir nicht ganz sicher, ob dies das ist, was Sie wollen, aber mit dem Joda-Zeit Bibliothek Sie können die Zeit vollständig anhalten. Aufrufe zum neuen Datum () oder neuer DateTime () innerhalb der Joda-Zeit werden kontinuierlich gleichzeitig zurückgegeben.

Mit diesem Anruf konnten Sie also in einem Thread "Stoppzeit":

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

Dann könnte Ihr Thread für beispielsweise 5000 ms schlafen und dann anrufen:

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

Vorausgesetzt, Ihre Anwendung erledigt alles, was sie basierend auf der Zeit innerhalb des Systems tut. Dies wird die Zeit "verlangsamen", indem sie alle 5 Sekunden Zeit eine Sekunde festlegen.

Aber wie gesagt ... ich bin mir nicht sicher, ob dies in Ihrer Umgebung funktionieren wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top