Se me alecera el reloj del PC con java

-suikEVIL_

Hola compañeros!

El otro día me fijé y me di cuenta de que tenía el reloj del ordenador unos 10 minutos adelantados pero no le di más importancia. Resulta que llevo programando un "Pang" desde hace un mes con java y hoy me he fijado que el tiempo va más deprisa de lo normal, he revisado todo pero el código está perfecto. Si cronometro el tiempo de mi juego y lo comparo con el del reloj de mi muñeca cada 60 segundos reales (el de mi muñeca) son 70 segundos del juego. Entonces para mi asombro he hecho varias pruebas y con el reloj del ordenador (el de abajo a la derecha) si no uso mi juego va igual que el de mi muñeca, pero si ejecuto mi programa va más rápido y acorde a mi juego. No tengo ni idea de por qué ocurre esto. La única función que uso que tenga algo que ver con el tiempo es System.currentTimeMillis().
Así que la conclusión es que con java en ejecución el reloj de mi cpu se acelera y se adelante (de ahí los 10 minutos adelantados del otro día).

Si alguien sabe algo del tema agradecería cualquier comentario.

PiTaGoRaS

Cuando lo he leído por primera vez he soltado un WTF! pero una simple búsqueda en Google revela que es un bug conocido de la JVM para Windows y que aparece cuando llamas a Thread.sleep() con valores que no son múltiplos de 10 (ms).

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4500388

Por tanto una manera de resolverlo es usar múltiplos de 10, y otra es, por lo visto, usar el flag -XX:+ForceTimeHighResolution al arrancar la JVM.

De todas formas según pone ahí afecta a las versiones anteriores a 1.4.1, así es posible que la 1.5 y 1.6 no estén afectadas (lo desconozco) con lo cual bastaría con actualizar tu jdk/jre.

Usuarios habituales

  • PiTaGoRaS
  • -suikEVIL_