Domanda

È possibile rallentare i tempi nella macchina virtuale Java in base all'utilizzo della CPU mediante modifica del codice sorgente di OpenJDK? Ho una simulazione di rete (Java a NS-3) che consuma in tempo reale, sincronizzato vagamente all'orologio da parete. Tuttavia, poiché gestisco così tanti clienti nella simulazione, l'utilizzo della CPU colpisce il 100% e non vengono mantenute garanzie difficili su quanto tempo dovrebbero richiedere gli eventi nel simulatore (cioè una quantità elevata di eventi super-lati). Pertanto, la simulazione è in cima a circa 40 nodi quando c'è molto traffico di rete, e anche allora è un po 'incerto. La soluzione ideale sarebbe quella di rallentare il tempo secondo la CPU, ma non sono sicuro di come farlo con successo. Una soluzione minore è solo rallentare il tempo di qualche più (lente temporale?).

Se qualcuno potesse fornire una guida, il codice sorgente per il file pertinente in questione (per Windows) è a http://pastebin.com/rsqpcdbd. Ho provato a modificare alcune parti del file, ma i miei risultati non hanno avuto molto successo.

Grazie in anticipo,
Chris

È stato utile?

Soluzione

Potresti guardare VirtualBox, che lo consente di farlo Accelerare o rallentare l'orologio degli ospiti dalla riga di comando.

Altri suggerimenti

Non sono del tutto sicuro se questo sia quello che vuoi ma, con il Joda-time Biblioteca puoi fermare completamente il tempo. Quindi le chiamate a New Date () o new DateTime () entro Joda-Time restituiranno continuamente nello stesso momento.

Quindi, potresti, in un thread "Stop Time" con questa chiamata:

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

Quindi il tuo thread potrebbe dormire per, diciamo, 5000 ms, quindi chiamare:

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

Quindi a condizione che la tua applicazione stia facendo tutto ciò che fa in base al tempo all'interno del sistema, questo "rallenta" il tempo mettendo in avanti un tempo ogni secondo ogni 5 secondi.

Ma, come ho detto ... Non sono sicuro che funzionerà nel tuo ambiente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top