Bei Xebia haben wir eine interne Mailingliste, auf der viele interessante technische Diskussionen geführt werden. Da wir eine Leidenschaft für die Weitergabe von Wissen haben, dachten wir, wir geben Ihnen einen Einblick in einige aktuelle Themen. Dies ist der erste Teil einer Serie, die wir planen.
Wir haben diesen speziellen Mail-Thread ausgewählt, weil er eine technische Frage beantwortet, die viele Leute haben könnten. Und er stellt auch eine wenig bekannte Funktion von Java 5 vor.
| Von | Jan Vermeir |
|---|
| Thema | Genauigkeit von System.getCurrentTimeMillis() |
|---|
| Datum | Mo 23/07/2007 15:51 |
|---|
|
Hallo, wir messen die verstrichene Zeit für die Verarbeitung einer Nachricht. Jeder gemessene Vorgang dauert ein paar Millisekunden, daher frage ich mich, wie genau System.getCurrentTimeMillis() ist. Ich habe eine vage Erinnerung daran, dass die Genauigkeit nicht wirklich Millisekunden beträgt, wie der Name vermuten lässt, und dass sie je nach Plattform und JVM-Anbieter variieren kann.
Weiß jemand etwas Genaues?
Jan.
|
| Von | Jeroen Borgers |
|---|
| Betreff: | Re: Genauigkeit von System.getCurrentTimeMillis() |
|---|
| Datum | Mo 23/07/2007 15:54 |
|---|
|
Die Granularität der Zeitmessung hängt vom Betriebssystem ab. Viele Betriebssysteme messen die Zeit in Einheiten von zehn Millisekunden. Mir ist nicht bekannt, dass verschiedene VMs hier unterschiedlich vorgehen.
Seit Java 5 gibt es den API-Aufruf System.nanoTime(), der Ihnen mehr Genauigkeit bieten kann. Er gibt den aktuellen Wert des präzisesten verfügbaren Systemtimers in Nanosekunden zurück. Er bietet Nanosekundenpräzision, aber nicht unbedingt Nanosekundengenauigkeit, was wiederum vom Betriebssystem abhängt. Diese Funktion ist nur für relative Vergleiche innerhalb der gleichen VM geeignet.Wofür verwenden Sie diese Funktion? Beim Benchmarking wollen Sie in der Regel nur ausreichend lange Zeiträume wie Sekunden messen, so dass Sie sich nicht um diese Genauigkeit kümmern müssen.
Mit freundlichen Grüßen,
Jeroen.
|
| Von | Machiel Groeneveld |
|---|
| Betreff: | Re: Genauigkeit von System.getCurrentTimeMillis() |
|---|
| Datum | Di 24/07/2007 10:36 |
|---|
|
Das könnte Sie interessieren: time : Java Glossar
|
| Von | Jeroen Borgers |
|---|
| Betreff: | Re: Genauigkeit von System.getCurrentTimeMillis() |
|---|
| Datum | Di 24/07/2007 11:06 |
|---|
|
Einige zusätzliche Informationen:
In der Java Bug Database
heißt es, dass getNanoTime unter Windows XP genauer ist als currentTimeMillis, aber die Ausführung ist teurer. Verwenden Sie es also nicht zu oft. Einige weitere Informationen zu Linux:Unter Linux scheinen die Dinge etwas eindeutiger zu sein. Um
System.nanoTime() wie angegeben ausführen zu können, benötigt die VM eine monotone Uhr und verarbeitet clock_gettime. Wenn CLOCK_MONOTONIC nicht unterstützt wird, ist keine monotone Uhr für die VM verfügbar und System.nanoTime() verhält sich wie gettimeofday. Gettimeofday misst mit einer Genauigkeit von Mikrosekunden.
Mit freundlichen Grüßen,
Jeroen.
|