Frage zur Laufzeit / Optimierung

  • Themenstarter Themenstarter Anon_Nymous
  • Beginndatum Beginndatum
A

Anon_Nymous

Gast
Hey,

habe folgendes in Java gecodet.

Java:
import java.util.Date;

public class FillViewportHightDemo {

	public static String hexToBinaryString1(String s) {
		String buff = "";
		for (int i = 0; i < s.length(); i += 4) {
			buff += (Integer.toBinaryString(0x10000 | Integer.valueOf(s.substring(i, i + 4), 16))).substring(1);
		}
		return buff;
	}

	public static String hexToBinaryString2(String s) {
		String buff = "";
		if (!s.equals("") && !s.equals(null) && (s.length() % 4 == 0)) {
			for (int i = 0; i < s.length(); i += 4) {
				buff += (Integer.toBinaryString(0x10000 | Integer.valueOf(s.substring(i, i + 4), 16))).substring(1);
			}
		}
		return buff;
	}

	public static void main(String[] args) {
		
		// Methode 1
		String testString1 = "A5A5A5A5A5A5FFFF";
		Date d1 = new Date();		
		long davor1 = d1.getTime();
		for (int i = 0; i < 1000000; i++) {
			hexToBinaryString1(testString1);
		}
		d1 = new Date();
		System.out.println(d1.getTime() - davor1);
		
		// Methode 2
		String testString2 = "A5A5A5A5A5A5FFFF";
		Date d2 = new Date();		
		long davor2 = d2.getTime();
		for (int i = 0; i < 1000000; i++) {
			hexToBinaryString2(testString2);
		}
		d2 = new Date();
		System.out.println(d2.getTime() - davor2);
	}
}

Hierbei handelt es sich um 2 Methoden, die einen Hex-String (der Länge n*4) in einen Binär-String umwandeln. Klappt auch alles super. Jetzt wollte ich das ganze aber noch nen bischen sicherer machen und nen paar Fehler abfangen.

Wie dem auch sei.. die beiden Methoden sind identisch, bis aus das bei der 2ten noch eine if-Abfrage mit bei ist. Die Mehtoden-Aufrufe sind auch identisch, da ich sie extra nochmal kopiert habe.

Aber jetzt frage ich mich, warum die 2te Methode schneller ist als die erste? Obswohl da noch eine if-Abfrage hinzugekommen ist. Und lustigerweise,
wenn ich erst Methode 2 und dann 1 aufrufe, dann ist 2 plötzlich langsamer...

Also immer die Methode die zuerst aufgerufen wird ist schneller. Wie kann das denn sein? Optimiert Java da irgendwas? Oder hab ich nen Fehler beim Aufruf der Methoden oder der Zeitmessung gemacht?
 
> Also immer die Methode die zuerst aufgerufen wird ist schneller. Wie kann das denn sein?

die erste ist langsamer, oder?
und zwar weil einerseits das Programm erst 'hochgefahren' wird,
im Hintergrund vielleicht Threads wie GarbageCollector und wer weiß was alles es sich gemütlich machen,

und vorallem liegt es (glaube ich) daran, dass zu Beginn noch kein Speicher reserviert ist,
während die erste Methode ihren String bis zur Unendlichkeit füllt, dann muss da speichermäßig gearbeitet werden,
die zweite Methode hat den Vorteil, dass der Platz schon zur Verfügung steht (auch wenn der String-Zusammenbau komplett erneut stattfindet)

ich warte bei meinen Tests am Anfang immer paar Sekunden und dann beide Varianten abwechseln je 5x ausführen,
diese 10 Zeiten kann man versuchen zu vergleichen

edit:
ich sehe gerade dass du gar keine großen Daten zusammenschreibst, der zweite Teil meiner Erklärung stimmt dann nicht unbedingt, zu schnell
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben