Eine Frage zur Bearbeitungszeit

civben85

Mitglied
Hallo,

ich hätte mal eine Frage zum Ablauf von Methoden und der Bearbeitungszeit:

Wenn ich eine Methode zweimal sehr dicht hintereinander aufrufe, wird dann das Ergebnis kurzzeitig irgendwo zwischengespeichert oder so? Ich habe hier zwei Methoden laufen lassen, einmal speichere ich den Rückgabewert in einer Variable und einmal rufe ich die Methode jeweils wieder neu auf.

Dann habe ich die zwei Sachen laufen lassen(extra übertrieben lang) und habe aber gleich lange Laufzeiten für das Programm bekommen (jeweils +/- 34000 ms).

Also wie gesagt, meine Frage: Werden Methodenergebnisse kurzzeitig zwischengespeichert, so dass erneute Methodenaufrufe einfach auf den Rückgabewert zugreifen können?

Code:
Java:
public static long euler036a() {
		for(int i = 1; i < 1000000; i++) {
			boolean pal = isPalinDecimalism(i);
			if(pal) System.out.println(i + " isPal: " + pal);
		}
		return -1;
	}

public static long euler036b() {
		for(int i = 1; i < 1000000; i++) {
			if(isPalinDecimalism(i)) System.out.println(i + " isPal: " + isPalinDecimalism(i));
		}
		return -1;
	}

in eulerb müsste die Methode isPalinDecimalism ja eigentlich zweimal durchlaufen werden und damit das Programm eine höhere Laufzeit haben, oder habe ich irgendwo einen Denkfehler?

Danke!
 
Ich spekuliere, vielleicht hat die JVM Deinen Code automatisch im Hintergrund optimiert und nach so vielen Schleifenaufrufen selbst gemerkt, daß ein bestimmtes Objekt immer wieder vorkommt, darum heißt ja eine bekannte VM eben Hotspot-VM.

Ab wann bzw. ab wievielen Aufrufen die VM zu optimieren beginnt, oder ob vielleicht schon der Compiler den Code umgestellt hat (Assembler-Analyse des Byte-Code?), kann ich Dir aber nicht beantworten, für Compiler- oder VM-Tuning bin ich kein Experte.
 
N

nillehammer

Gast
in eulerb müsste die Methode isPalinDecimalism ja eigentlich zweimal durchlaufen werden und damit das Programm eine höhere Laufzeit haben, oder habe ich irgendwo einen Denkfehler?
Ja, müsste es. Der mögliche Denkfehler könnte sein, dass
Code:
isPalinDecimalism(i)
für die meisten Zahlen
Code:
false
returnt. In diesem Fall wird diese Methode nämlich auch bei
Code:
euler036b()
nur einmal aufgerufen, weil der if-Block nicht betreten wird.
 
J

JohannisderKaeufer

Gast
Es gibt eine sehr einfache Erklärung für das ganze.

Nimm zwei Personen. A ist 2,20 m groß. B ein Kind 1,00 m. Der Größenunterschied ist vergleichsweise gewaltig. A/B = 2,2

Jetzt stell Beide auf ein 100 Meter hohes Gebäude und miß die Höhe des Gebäudes und der Person.

A 102,2 m
B 101,0 m

Wenn man nun vergleicht bekommt man ein Verhältnis von A/B = 1,0119. Beide sind demnach fast gleich groß.

Genau das passiert bei deinem Code.

System.out.println ist sehr sehr langsam im Vergleich zu einer einzigen Berechnung von
Code:
isPalinDecimal()
.

Der Faktor der println() langsamer ist würde ich so in die Größenordnung von 100 einordnen.

Bei der Aufgabe geht es ja zudem um das Projekt Euler Aufgabe 36. Eine Kurze Internetrecherche führt zu einer Implementierung in C# die laut angaben, die komplette Aufgabe löst. Also auch die Überprüfung auf "isPalinBinary()" und wie in der Aufgabenstellung die Werte addiert anstatt Sie einzeln auszugeben. Die Rechenzeit für ebenfalls 1 Mio Einträge, beträgt dort nur ca. 120 ms insgesamt.

Dies nur zur Ergänzung von nillehammer
 

civben85

Mitglied
Ja das mit der If-Bedingung stimmt, da ist man sowieso selten drin :autsch: ...
Und dass das System.out hier ausbremst kann auch sein.

Aber mir ging es sowieso eher prinzipiell darum wie Java damit umgeht, wenn die gleiche Methode mit den gleichen Parametern öfters hintereinander aufgerufen wird. Also sagen wir wir haben eine Methode (public int takesTime() ), die einen int zurückgibt und sehr lange dauert bsp. 100ms.

Dann wäre die Dauer von
Java:
int x = takesTime();
int y = takesTime();
ja theoretisch ca. 200ms weil takesTime() zweimal durchlaufen wird.

Allerdings wäre
Java:
int x = takesTime();
int y = x;
ja theoretisch dann ca. doppelt so schnell.

Darum ging es mir.

Daher vielen Dank an Meno, das mit der Optimierung der VM ist interessant und gut zu wissen.

Änderung:

Ach und meine Euler36-Methode dauert auch nicht so ewig, ich hab mich nur beim erstellen danach gefragt wie solche Methodenaufrufe gehandhabt werden und dann die Schleife nicht bis 10^6 sondern 10^9 laufen lassen damit man etwaige Unterschiede in der Laufzeit sieht :). thx
 
Zuletzt bearbeitet:

Bleiglanz

Gesperrter Benutzer
Nur weils dich interessiert:

In Java wird jede Methode IMMER abgearbeitet, weil Seiteneffekte vorkommen können.

In deinem Beispiel kann der Compiler ja nicht wissen, dass der zweite Aufruf von takesTime() das gleiche Ergebnis liefert - vielleicht ist I/O im Spiel?

Wenn schon beim Schreiben des Codes klar ist, dass immer der gleiche Rückgabewert entsteht wird sowas manchmal beim Übersetzen vom Compiler wegoptimiert (das passiert aber nur in ziemlich einfachen Fällen).

Was du meinst geht eher in Richtung "funktionale Programmierung", wo Aufrufe mit den gleichen Parametern IMMER das gleiche Ergebnis liefern usw.
 

Landei

Top Contributor
Genau.

Natürlich kann man selbst memoisieren, z.B. in einer Map alle bisherigen Ergebnisse speichern, und bei jedem Aufruf prüfen, ob das schon mal abgefragt wurde, so dass man sich die Berechnung eventuell sparen kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
T Eine Frage des Designs Allgemeine Java-Themen 2
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
A eine test thread.join() frage Allgemeine Java-Themen 2
A Noch eine Frage zur Methode matches() Allgemeine Java-Themen 2
J Java-Datei unter Mac OS X öffnen - eine Frage der Klasse Allgemeine Java-Themen 2
T eine Frage zu hashCode() Allgemeine Java-Themen 11
M Eine Frage über Unit-Tests mit Java Allgemeine Java-Themen 2
M Nur mal eine kurze Frage zum FileOutPutStream Allgemeine Java-Themen 6
R Eine Frage zum Streaming - EDIT Allgemeine Java-Themen 2
F Gutes Threads Tutorial hier aber trotzdem eine Frage Allgemeine Java-Themen 7
G Eine Frage zu Java Allgemeine Java-Themen 15
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
dokan wie kann ich eine funktionierende Suchleiste erstellen Allgemeine Java-Themen 1
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
8u3631984 Strukturiertes Logging : Jedes Feld in eine seperate Zeile - aber wie ? Allgemeine Java-Themen 2
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
M Eigene Datenstruktur um eine Menge zu speichern Allgemeine Java-Themen 3
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
E Es ist nicht möglich, eine Batch-Anweisung auszuführen. Allgemeine Java-Themen 9
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
H Eine Linie verkürzen Allgemeine Java-Themen 5
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
berserkerdq2 Wie mache ich in IJVM eine if verzweigung? Allgemeine Java-Themen 27
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
_user_q Was brauche ich, um eine eigene "Search for updates"-Funktion einzubauen? Allgemeine Java-Themen 1
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
LimDul Kam eine java.net.URL zu einer HashMap und ging als DNS Anfrage wieder heraus Allgemeine Java-Themen 18
pizza_dox_9999 Wie füge ich eine "eigene" ScriptEngine dem ScriptEngineManager? Allgemeine Java-Themen 3
F Kennt ihr eine Library um 2 HTML Seiten zu diffen? Allgemeine Java-Themen 8
Y ImagePanel von anderer Klasse in eine MainFrame Klasse hinzufügen. Allgemeine Java-Themen 1
OnDemand Anzeigen was eine Applikation macht Allgemeine Java-Themen 1
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
Tobero Wie kann man eine Poisson Disc Sampler? Allgemeine Java-Themen 7
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
R Wo müsste ich im Code eine Änderung vornehmen? Allgemeine Java-Themen 6
S Rückgabe einer HttpURLConnection für eine Seite einlesen bei der man eingeloggt ist..? Allgemeine Java-Themen 5
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
S Habt ihr eine Idee wie man Serializierung testen kann..? Allgemeine Java-Themen 6
S Wenn eine Klasse zwei Interfaces mit derselben Methodensignatur implementiert: welche wird aufgerufen? Allgemeine Java-Themen 15
Drachenbauer warum bekomme ich hier eine NullPointerException Allgemeine Java-Themen 6
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
N Eine stelle der Fibonacci-Zahlenfolge ausgeben. Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
J Datenstruktur für eine Map erstellen Allgemeine Java-Themen 2
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
pkm Kann eine ServerSocket-Klasse nicht stateful sein? Allgemeine Java-Themen 4
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
I Eine Anwendung so gut wie möglich beschützen Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Login in eine Webseite mit Java Allgemeine Java-Themen 3
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
D Warum kann ich eine (deflaut) Klasse aus einer Libary in einem anderen Projekt benutzen? Allgemeine Java-Themen 3
L Übergabe an eine eher einfache Java- Applikation wegen Kündigung Allgemeine Java-Themen 1
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
M Schlüsselworte Was ist eine Java Spezifikation + JSR? Allgemeine Java-Themen 11
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
S Korrekte Pfadangaben damit eine .jar Datei unter Windwos läuft. Allgemeine Java-Themen 24
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
R bei eclipse von java in eine andere programmiersprache wechseln? Allgemeine Java-Themen 2
D Pivot-Wahl beim QuickSort steigert die Effizienz, eine Lüge??? Allgemeine Java-Themen 17
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
M Klassen Eine Klasse in mehreren Klassen einbinden Allgemeine Java-Themen 11
A Best Practice Java - eine Art Plugin-Struktur Allgemeine Java-Themen 3
S wie rufe ich mit .jar datei eine .bat auf? Allgemeine Java-Themen 15
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
perlenfischer1984 Functionsparameter prüfen und eine Exception werfen !? Allgemeine Java-Themen 11
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
E Methoden Hat jemand eine gute Lösung? Allgemeine Java-Themen 5
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben