Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

Java ist auch eine Insel von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 5 (Tiger-Release)
Buch: Java ist auch eine Insel
gp Kapitel 8 Die Funktionsbibliothek
  gp 8.1 Die Java-Klassenphilosophie
    gp 8.1.1 Übersicht über die Pakete der Standardbibliothek
  gp 8.2 Wrapper-Klassen
    gp 8.2.1 Die Character-Klasse
    gp 8.2.2 Die Boolean-Klasse
    gp 8.2.3 Die Basisklasse Number für numerische Wrapper-Objekte
    gp 8.2.4 Die Klasse Integer
    gp 8.2.5 Behandlung von Überlauf
    gp 8.2.6 Unterschiedliche Ausgabeformate
    gp 8.2.7 Autoboxing: Boxing und Unboxing
  gp 8.3 Benutzereinstellungen
    gp 8.3.1 Eine zentrale Registry
    gp 8.3.2 Einträge einfügen, auslesen und löschen
    gp 8.3.3 Auslesen der Daten und schreiben in anderem Format
    gp 8.3.4 Auf Ereignisse horchen
  gp 8.4 Systemeigenschaften der Java-Umgebung
    gp 8.4.1 line.separator
    gp 8.4.2 Browser-Version abfragen
    gp 8.4.3 Property von der Konsole aus setzen
    gp 8.4.4 Umgebungsvariablen des Betriebssystems
  gp 8.5 Ausführung von externen Programmen
    gp 8.5.1 DOS-Programme aufrufen
    gp 8.5.2 Die Windows-Registry verwenden
    gp 8.5.3 Einen HTML-Browser unter Windows aufrufen
  gp 8.6 Klassenlader (Class Loader)
    gp 8.6.1 Woher die kleinen Klassen kommen
    gp 8.6.2 Drei Typen von Klassenladern
    gp 8.6.3 Der java.lang.ClassLoader
    gp 8.6.4 Hot Deployment mit dem URL-ClassLoader
    gp 8.6.5 Das jre/lib/endorsed-Verzeichnis
    gp 8.6.6 Wie heißt die Klasse mit der Methode main()?
  gp 8.7 Zeitmessung und Profiling


Galileo Computing

8.7 Zeitmessung und Profiling  toptop

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.





Copyright © Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de