Zeitmessung:  
   
  Die Methode currentTimeMillis liefert die Anzahl Millisekunden, die zum Zeitpunkt des Aufrufs seit Mitternacht des 1.1.1970 vergangen sind:  
   
 
public static long currentTimeMillis()                                java.lang.System
 
   
  Ob dabei aber tatsächlich eine Auflösung von einer Millisekunde erreicht wird, ist von der konkreten Java-Implementierung abhängig.  
 
Für die verschiedenen Betriebssysteme ergeben sich folgende Auflösungen:
 
 

 

Betriebssystem Auflösung
Unix / Linux 1 ms
WinNT / 2000 10 ms
Win 95 / 98 55 ms
Mac OS 1/16/1000 ms

 

 
   
  Mit dem Programm Time kann die Auflösung des verwendeten System-Timers ermittelt werden:  
   
  In PC-basierten Java-Systemen orientiert sie sich meist an der Auflösung des System-Timers. In Windows 95/98 wird dieser 18,2 mal pro Sekunde aufgerufen, so daß die Auflösung damit bei etwa 55 ms. liegt.  
  Diese Auflösung ist für unsere Zwecke allerdings viel zu gering, denn sie liefert (fast) immer den Wert 0 ms für die Laufzeit.  
 

 

Die Probleme mit den Systenspezifischen Zeitauflösungen sind SUN und vielen Software-Entwicklern bereits seit längerem bekannt, eine Lösung wird aber auch hier nicht angeboten

http://developer.java.sun.com/developer/bugParade/bugs/4123961.html (login bei SUN ist erforderlich)

 
   
  Ergebnisse der Zeitmessung:  
   
  Da kein UNIX oder Linux System zur Verfügung stand, erfolgten unsere Messungen auf einem Windows 2000 System und einem 100Mbit/s Netzwerk mit 4 Port Hub.  
   
 
Zeitmessung Unbelastet Rechner belastet Netz belastet Netz und Rechner belastet
Client und Service auf dem gleichen Rechner laufend

>10 ms

Anzeige 0 ms

10-30 ms

Anzeige steigt erst auf bis zu 50 ms fällt dann aber wieder auf 20 ms ab

   
Client und Service auf unterschiedlichen Rechnern laufend

>20 ms

Anzeige meistens 10 ms selten 0 oder 20 ms

10-30 ms

Anzeige steigt erst auf bis zu 50 ms fällt dann aber wieder auf 10-20 ms ab

10-30 ms

Anzeige meistens 20 ms selten 10 oder 30 ms

30-40 ms

Anzeige steigt erst auf bis zu 70 ms fällt dann aber wieder auf 20-30 ms ab

 
   
  Das Netz wurde durch umkopieren großer Datenmengen zwischen den beiden Rechnern belastet. Dabei fällt auf, das der Zeitwert beim Starten des Kopiervorganges (oder eines anderen Programmes z.B. MS-Word) zunächst ansteigt, sich aber Später wieder auf einen geringeren Wert einpendelt.  
   
  Der Anstieg der Zeit ist also in den meisten Fällen nicht auf die Belastung des Netzwerkes zurück zu führen, sondern darauf, daß der JINI Anwendung vom Betriebssystem die Recourcen entzogen werden.  
   
  Weitere Erkenntnisse:

 
 

Da wir nur eine sehr geringen Datenmenge (einige Byte) durch das Netzwerk schicken, hat ein belastetes oder unbelastetes Netz auf die von uns gemessenen Zeiten nur sehr geringe Auswirkungen

 

 
 

Der Start eines Prozesses auf einem der Rechner fällt bei dieser Anwendung weitaus mehr ins Gewicht !
In der Praxis sollte also möglichst nur die JINI Umgebung, oder besser noch ein JINI Betriebssystem auf dem zur Steuerung eingesetzten System laufen, da es sonst zu ungewollten Verzögerungen kommen kann.

 
 


Die Auflösung des Systemtimers ist zur Ermittlung der eigentlichen Laufzeit nicht ausreichend!
Eine bessere Auflösung kann z.B. dadurch erreicht werden, dass mehrere Durchläufe (10 oder besser 100) zwischen Client und Service in einer Programmschleife durchgeführt werden und die Zeit aus diesen gemittelt wird.