8.7 Zeitmessung und Profiling
 
Die Methode System.currentTimeMillis() gibt die vergangenen Millisekunden seit dem 1.1.1970 zurück. Die Differenz zweier Zeitwerte kann zur groben Abschätzung von Ausführungszeiten für Programme dienen. Wo im Programm überhaupt Taktzyklen vertraten werden, zeigt ein Profiler. An diesen Stellen kann dann mit der Optimierung begonnen werden.
Listing 8.10
Profiling.java
class Profiling
{
public static void main( String args[] )
{
int MAX = 10000;
// StringBuffer append() zur Konkatenation
long time1 = System.currentTimeMillis();
StringBuffer sb = new StringBuffer( MAX * 5 );
for ( int i = MAX; i-- > 0; )
sb.append( "Heini" );
String result = sb.toString();
time1 = System.currentTimeMillis() - time1;
// + zur Konkatenation
long time2 = System.currentTimeMillis();
String t = "";
for ( int i = MAX; i-- > 0; )
t += "Heini";
time2 = System.currentTimeMillis() - time2;
System.out.println( "append(): " + time1 + " ms" );
System.out.println( "t+=: " + time2 + " ms" );
}
}
Wird das Programm gestartet, so bekomme ich auf meinem Rechner (AMD Athlon 2,6+, Java 2 SDK 1.5) die nachstehende Ausgabe:
append(): 0 ms
t+=: 5359 ms
Das Ergebnis: Bei großen Anhänge-Operationen ist es sinnvoll einen StringBuffer (oder StringBuilder) zu nutzen, diesen passend vorzuinitialisieren und zu füllen. Über das + entstehen viele temporäre Objekt, was teuer ist.
|