Pregunta

¿Es posible ralentizar el tiempo en la máquina virtual Java de acuerdo con el uso de la CPU mediante la modificación del código fuente de OpenJDK? Tengo una simulación de red (Java a NS-3) que consume tiempo real, sincronizado libremente con el reloj de la pared. Sin embargo, debido a que ejecuto tantos clientes en la simulación, el uso de la CPU alcanza el 100% y las garantías difíciles no se mantienen sobre cuánto tiempo deberían llevar los eventos en el simulador (es decir, una gran cantidad de eventos súper tardíos). Por lo tanto, la simulación supera a alrededor de 40 nodos cuando hay mucho tráfico de red, e incluso entonces es un poco dudoso. La solución ideal sería ralentizar el tiempo de acuerdo con la CPU, pero no estoy seguro de cómo hacerlo con éxito. Una solución menor es simplemente reducir el tiempo en algunos múltiples (¿lente de tiempo?).

Si alguien pudiera dar alguna orientación, el código fuente para el archivo relevante en cuestión (para Windows) está en http://pastebin.com/rsqpcdbd. He intentado modificar algunas partes del archivo, pero mis resultados realmente no han tenido mucho éxito.

Gracias por adelantado,
Chris

¿Fue útil?

Solución

Podrías mirar VirtualBox, que permite que uno Acelerar o ralentizar el reloj de invitado Desde la línea de comando.

Otros consejos

No estoy completamente seguro de si esto es lo que quieres pero con el Joda-tiempo Biblioteca Puede detener el tiempo por completo. Por lo tanto, las llamadas a una nueva fecha () o una nueva Datetime () dentro de Joda Time regresarán continuamente al mismo tiempo.

Entonces, podrías, en un hilo "Tiempo de detención" con esta llamada:

DateTimeUtils.setCurrentMillisFixed(System.currentTimeMillis());

Entonces su hilo podría dormir para, por ejemplo, 5000 ms, y luego llamar a:

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

Por lo tanto, siempre que su aplicación esté haciendo lo que haga en función del tiempo dentro del sistema, esto "disminuirá el tiempo al establecer el tiempo reenviado un segundo cada 5 segundos.

Pero, como dije ... no estoy seguro de que esto funcione en su entorno.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top