de.hska.java.aufgaben.sonstiges
Class HexadezimalZifferZeitmessung

java.lang.Object
  extended by de.hska.java.aufgaben.sonstiges.HexadezimalZifferZeitmessung

public class HexadezimalZifferZeitmessung
extends java.lang.Object

Enthält eine main-Methode, um die durchschnittliche Zeit in Nanosekunden zu messen, die ein Aufruf von getDezimaWert() der verschiedenen HexadezimalZiffer-Implementierungen benötigt.

Hier die Werte meiner Implementierung (JDK 1.6, keine Optimierung, Athlon 64 3500+).

  Switch: 11.996048504545454
  If: 17.546552072727273
  Feld: 14.882158081818181
 
switch ist also am schnellsten.

Es gibt im Bytecode zwei verschiedene switch-Befehle: der eine vergleicht die Werte, der andere verwendet eine Sprungtabelle. Vermutlich ist switch hier schneller, als die eigene Implementierung mit einer "Sprung"tabelle, da der Bytecode für das switch effizienter und direkter vom Interpreter ausgeführt werden kann.

Zurück zum Aufgabentext

Author:
pape

Constructor Summary
HexadezimalZifferZeitmessung()
           
 
Method Summary
static long getNanoTime(int anzahlAufrufe, HexadezimalZiffer[] hexadezimalZiffern)
          Gibt die Gesamtzeit für alle Aufrufe von getDezimalWert() der HexadezimalZiffern zurück.
static void main(java.lang.String[] args)
          Misst die durchschnittliche Zeit in Nanosekunden, die ein Aufruf von getDezimalWert() für alle Implementierungen von HexadezimalZiffer hat.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

HexadezimalZifferZeitmessung

public HexadezimalZifferZeitmessung()
Method Detail

main

public static void main(java.lang.String[] args)
Misst die durchschnittliche Zeit in Nanosekunden, die ein Aufruf von getDezimalWert() für alle Implementierungen von HexadezimalZiffer hat. Dabei werden immer die Dezimalwerte alle Ziffer von '0' bis '9', 'a'-'f' und 'A'-'F' gleichverteilt sehr oft nacheinander berechnet.


getNanoTime

public static long getNanoTime(int anzahlAufrufe,
                               HexadezimalZiffer[] hexadezimalZiffern)
Gibt die Gesamtzeit für alle Aufrufe von getDezimalWert() der HexadezimalZiffern zurück. Es werden insgesamt anzahlAufrufe * hexadezimalZiffer.length Aufrufe durchgeführt. anzahlAufrufe sollte möglichst gross sein, damit bei der Zeitmessung die initialen Zeitaufwände für die for-Schleifen nicht besonders ins Gewicht fallen.



(c) Prof. Dr. Christian Pape --- Übersicht aller Java-Programmieraufgaben