[Systeme]currentTimeMillis
Bonjour,
J'ai besoin de calculer très precisemment (à la milliseconde) le temps écoulé entre deux opérations dans mon code. Pour calculer ce temps d'execution j'utilise la méthode currentTimeMillis() de la classe System.
Le probleme c'est que cette méthode a un fonctionnement plus étrange...
Voila un exemple avec un code tout simple :
Code:
1 2 3
| for(int i=0;i<10000;i++) {
System.out.println(System.currentTimeMillis());
} |
Ce qui produit le résultat suivant (j'ai evidemment pas mis toutes les valeurs) :
...
1139394945590
1139394945590
1139394945590
1139394945590
1139394945590
1139394945590
1139394945590
1139394945590
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
...
1139394945605
1139394945605
1139394945605
1139394945605
1139394945605
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
....
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945621
1139394945636
1139394945636
1139394945636
1139394945636
1139394945636
1139394945636
1139394945636
1139394945636
Pour une raison qui j'ignore, la fonction "saute" de temps en temps 16 millisecondes.
Ma question est donc la suivante : est ce normal ? et dans ce cas il faudra m'expliquer qu'elle en est la raison. et sinon qu'est ce que je peux utiliser à la place de cette méthode pour obtenir les résultats que je souhaite.
merci.
Re: [System]currentTimeMillis
Salut,
Citation:
Envoyé par Guybrush
Ma question est donc la suivante : est ce normal ? et dans ce cas il faudra m'expliquer qu'elle en est la raison.
Il faut lire la doc !!!! :P
Citation:
Envoyé par [url=http://javasearch.developpez.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()
System.currentTimeMillis()[/url]]Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.
La valeur retourné correspondbien à des millisecondes, mais cela ne signifie pas que la précision est de l'ordre de la milliseconde... De plus la précision dépend du système d'exploitation...
Généralement sous Windows la "précision" est de l'ordre de 16 ms...
Citation:
Envoyé par Guybrush
et sinon qu'est ce que je peux utiliser à la place de cette méthode pour obtenir les résultats que je souhaite.
Avec Java 5.0 tu peux utiliser System.nanoTime(), mais la précision n'est pas garantit non plus...
Sinon qu'est-ce que tu veux calculer exactement ?
Si tu veux te rapprocher le plus possible du temps d'exécution réelle, il faut exécuter tes opérations un grand nombre de fois, et prendre le temps d'exécution totale. Il ne reste plus qu'a faire une petite division pour obtenir le temps moyen unitaire (et la "mauvaise" précision sera alors quasiment nulle).
a++