J'ai l'impression que System.currentTimeMillis souffre de défauts pour
calculer un delta entre deux instants:
* mauvaise précision, de l'ordre de 10ms sur windows
* peut aller backwards en cas de NTP
Ai-je bon ?
J'aimerai savoir si System.nanoTime est plus fiable, par fiable
j'entends que System.nanoTime:
* ne puisse jamais aller backwards
* ni sauter vers une valeur aléatoire au cours de la vie d'un process,
* ait une précision de l'ordre de la ms (ou moins)
En d'autres termes, je voudrais une réponse définitive à:
si a l'instant T je fais start = System.nanoTime
si a l'instant T+x je fais stop = System.nanoTime
alors stop - start est-il toujours égal à x (+ ou - la précision) ?
D'après la javadoc, il semble que ce soit le cas. Toutefois les
résultats de recherche sur google sont plus mitigés, et se
rapprocheraient plutôt de
"Yes but not on windows < XP XP2 and linux < 2.6.18 and if underlying
platform supports a monotonic clock."
(par exemple ici
http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless)
Il semble toutefois que System.nanoTime ne marche pas comme attendu sur
XP64 sp2
http://stackoverflow.com/questions/7270314/scheduledthreadpool-scheduleatfixedrate-strange-behaviour
Est-ce qu'un quelqu'un a une réponse totalement précise qui donnerait
les versions de JVM, et d'os (et de processeur ?) pour avoir un
System.nanoTime correct ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yliur
Le Wed, 26 Oct 2011 11:08:41 +0200 Alexandre Vaissière a écrit :
Bonjour
J'ai l'impression que System.currentTimeMillis souffre de défauts pour calculer un delta entre deux instants: * mauvaise précision, de l'ordre de 10ms sur windows
C'est écrit dans la javadoc, et ça va effectivement dépendre du système.
* peut aller backwards en cas de NTP
Probablement, puisque ça renvoie une date depuis le 1er janvier 1970.
J'aimerai savoir si System.nanoTime est plus fiable, par fiable j'entends que System.nanoTime: * ne puisse jamais aller backwards * ni sauter vers une valeur aléatoire au cours de la vie d'un process,
C'est ce que je comprends de la Javadoc.
* ait une précision de l'ordre de la ms (ou moins)
Ça ne me semble pas garanti, parce que ça dépend du matériel et du système (il faut qu'ils fournissent une information aussi précise).
En d'autres termes, je voudrais une réponse définitive à:
si a l'instant T je fais start = System.nanoTime si a l'instant T+x je fais stop = System.nanoTime alors stop - start est-il toujours égal à x (+ ou - la précision) ?
D'après la javadoc, il semble que ce soit le cas. Toutefois les résultats de recherche sur google sont plus mitigés, et se rapprocheraient plutôt de
"Yes but not on windows < XP XP2 and linux < 2.6.18 and if underlying platform supports a monotonic clock."
(par exemple ici http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless)
Il semble toutefois que System.nanoTime ne marche pas comme attendu sur XP64 sp2 http://stackoverflow.com/questions/7270314/scheduledthreadpool-scheduleatfixedrate-strange-behaviour
Est-ce qu'un quelqu'un a une réponse totalement précise qui donnerait les versions de JVM, et d'os (et de processeur ?) pour avoir un System.nanoTime correct ?
Je n'ai pas de réponse définitive ou totalement précise.
Mais quelques questions/remarques : - Si c'est pour écrire un programme totalement portable, ça me paraît compromis. - Si c'est pour choisir une plate-forme pour une appli, est-ce qu'il n'y a pas moyen d'écrire un test ? Au moins pour la précision, tu peux regarder combien de valeurs différentes tu obtiens. Pour les questions de multicoeurs c'est plus compliqué, mais les tests fournis dans ton deuxième lien fournissent une première base.
Le Wed, 26 Oct 2011 11:08:41 +0200
Alexandre Vaissière <avaiss@domain.invalid> a écrit :
Bonjour
J'ai l'impression que System.currentTimeMillis souffre de défauts
pour calculer un delta entre deux instants:
* mauvaise précision, de l'ordre de 10ms sur windows
C'est écrit dans la javadoc, et ça va effectivement dépendre du système.
* peut aller backwards en cas de NTP
Probablement, puisque ça renvoie une date depuis le 1er janvier 1970.
J'aimerai savoir si System.nanoTime est plus fiable, par fiable
j'entends que System.nanoTime:
* ne puisse jamais aller backwards
* ni sauter vers une valeur aléatoire au cours de la vie d'un
process,
C'est ce que je comprends de la Javadoc.
* ait une précision de l'ordre de la ms (ou moins)
Ça ne me semble pas garanti, parce que ça dépend du matériel et du
système (il faut qu'ils fournissent une information aussi précise).
En d'autres termes, je voudrais une réponse définitive à:
si a l'instant T je fais start = System.nanoTime
si a l'instant T+x je fais stop = System.nanoTime
alors stop - start est-il toujours égal à x (+ ou - la précision) ?
D'après la javadoc, il semble que ce soit le cas. Toutefois les
résultats de recherche sur google sont plus mitigés, et se
rapprocheraient plutôt de
"Yes but not on windows < XP XP2 and linux < 2.6.18 and if underlying
platform supports a monotonic clock."
(par exemple ici
http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless)
Il semble toutefois que System.nanoTime ne marche pas comme attendu
sur XP64 sp2
http://stackoverflow.com/questions/7270314/scheduledthreadpool-scheduleatfixedrate-strange-behaviour
Est-ce qu'un quelqu'un a une réponse totalement précise qui donnerait
les versions de JVM, et d'os (et de processeur ?) pour avoir un
System.nanoTime correct ?
Je n'ai pas de réponse définitive ou totalement précise.
Mais quelques questions/remarques :
- Si c'est pour écrire un programme totalement portable, ça me paraît
compromis.
- Si c'est pour choisir une plate-forme pour une appli, est-ce qu'il
n'y a pas moyen d'écrire un test ? Au moins pour la précision, tu
peux regarder combien de valeurs différentes tu obtiens. Pour les
questions de multicoeurs c'est plus compliqué, mais les tests
fournis dans ton deuxième lien fournissent une première base.
Le Wed, 26 Oct 2011 11:08:41 +0200 Alexandre Vaissière a écrit :
Bonjour
J'ai l'impression que System.currentTimeMillis souffre de défauts pour calculer un delta entre deux instants: * mauvaise précision, de l'ordre de 10ms sur windows
C'est écrit dans la javadoc, et ça va effectivement dépendre du système.
* peut aller backwards en cas de NTP
Probablement, puisque ça renvoie une date depuis le 1er janvier 1970.
J'aimerai savoir si System.nanoTime est plus fiable, par fiable j'entends que System.nanoTime: * ne puisse jamais aller backwards * ni sauter vers une valeur aléatoire au cours de la vie d'un process,
C'est ce que je comprends de la Javadoc.
* ait une précision de l'ordre de la ms (ou moins)
Ça ne me semble pas garanti, parce que ça dépend du matériel et du système (il faut qu'ils fournissent une information aussi précise).
En d'autres termes, je voudrais une réponse définitive à:
si a l'instant T je fais start = System.nanoTime si a l'instant T+x je fais stop = System.nanoTime alors stop - start est-il toujours égal à x (+ ou - la précision) ?
D'après la javadoc, il semble que ce soit le cas. Toutefois les résultats de recherche sur google sont plus mitigés, et se rapprocheraient plutôt de
"Yes but not on windows < XP XP2 and linux < 2.6.18 and if underlying platform supports a monotonic clock."
(par exemple ici http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless)
Il semble toutefois que System.nanoTime ne marche pas comme attendu sur XP64 sp2 http://stackoverflow.com/questions/7270314/scheduledthreadpool-scheduleatfixedrate-strange-behaviour
Est-ce qu'un quelqu'un a une réponse totalement précise qui donnerait les versions de JVM, et d'os (et de processeur ?) pour avoir un System.nanoTime correct ?
Je n'ai pas de réponse définitive ou totalement précise.
Mais quelques questions/remarques : - Si c'est pour écrire un programme totalement portable, ça me paraît compromis. - Si c'est pour choisir une plate-forme pour une appli, est-ce qu'il n'y a pas moyen d'écrire un test ? Au moins pour la précision, tu peux regarder combien de valeurs différentes tu obtiens. Pour les questions de multicoeurs c'est plus compliqué, mais les tests fournis dans ton deuxième lien fournissent une première base.