java - showconfirmdialog - joptionpane showinputdialog



Aufruf der Java-Methode im Vergleich zur Verwendung einer Variablen (9)

Deine Führung ist korrekt. In modernen Versionen der VM sind einfache Getter, die ein privates Feld zurückgeben, inline, was bedeutet, dass der Leistungsaufwand eines Methodenaufrufs nicht vorhanden ist.

Kürzlich bin ich in eine Diskussion mit meinem Team-Lead über die Verwendung von temporären Variablen und dem Aufruf von Getter-Methoden geraten. Ich war lange der Meinung, dass wenn ich wüsste, dass ich eine einfache Getter-Methode einige Male aufrufen müsste, würde ich sie in eine temporäre Variable setzen und stattdessen diese Variable verwenden. Ich dachte, dass dies sowohl in Bezug auf Stil als auch auf Leistung besser wäre. Allerdings wies mein Lead darauf hin, dass dies in Java 4 und neueren Editionen nicht richtig war. Er glaubt daran, einen kleineren Variablenraum zu verwenden, also sagte er mir, dass das Aufrufen von Getter-Methoden eine sehr vernachlässigbare Leistungseinbuße hatte, im Gegensatz zur Verwendung einer Temp-Variable, und daher war die Verwendung von Gettern besser. Ich bin jedoch von seinem Argument nicht völlig überzeugt. Was denkt ihr?


Answer #1

Die virtuelle Maschine kann die ersten vier lokalen Variablen effizienter verarbeiten als jede danach deklarierte lokale Variable (siehe Anweisungen lload und lload_ <n> ). Das Zwischenspeichern des Ergebnisses des (eingefügten) Getters kann also Ihre Leistung beeinträchtigen.

Natürlich ist jeder Leistungseinfluss selbst vernachlässigbar. Wenn Sie also Ihren Code optimieren wollen, stellen Sie sicher, dass Sie einen echten Flaschenhals in Angriff nehmen!


Answer #2

Ein weiterer Grund, keine temporäre Variable zu verwenden, um das Ergebnis eines Methodenaufrufs zu enthalten, besteht darin, dass Sie mit der Methode den aktuellsten Wert erhalten. Dies könnte kein Problem mit dem tatsächlichen Code sein, aber es könnte ein Problem werden, wenn der Code geändert wird.


Answer #3

Es ist nicht wert, wenn es nur getFoo() . Indem Sie es in eine temporäre Variable zwischenspeichern, machen Sie es nicht viel schneller und bitten vielleicht um Probleme, da getFoo() später einen anderen Wert zurückgeben kann. Aber wenn es etwas wie getFoo().getBar().getBaz().getSomething() und Sie wissen, dass der Wert nicht innerhalb des Blocks geändert wird, dann kann es einen Grund geben, die Variable temp für bessere Lesbarkeit zu verwenden.


Answer #4

Ich bin für die Verwendung der Temp-Variable, wenn Sie sicher sind, über Getter wird den gleichen Wert im gesamten Umfang zurückgeben. Denn wenn Sie eine Variable mit dem Namen der Länge 10 oder mehr haben, sieht der Getter im Lesbarkeitsaspekt schlecht aus.


Answer #5

Ich denke, dass neuere Versionen der JVM oft schlau genug sind, das Ergebnis eines Funktionsaufrufs automatisch zwischenzuspeichern, wenn bestimmte Bedingungen erfüllt sind. Ich denke, die Funktion muss keine Nebenwirkungen haben und bei jedem Aufruf das gleiche Ergebnis liefern. Beachten Sie, dass dies bei einfachen Gettern der Fall sein kann oder auch nicht, je nachdem, was anderer Code in Ihrer Klasse mit den Feldwerten macht.

Wenn dies nicht der Fall ist und die aufgerufene Funktion eine signifikante Verarbeitung durchführt, wäre es in der Tat besser, das Ergebnis in einer temporären Variablen zwischenzuspeichern. Während der Overhead eines Anrufs möglicherweise unbedeutend ist, wird eine beschäftigte Methode Ihr Mittagessen essen, wenn Sie es öfter als nötig anrufen.

Ich übe auch deinen Stil; wenn auch nicht aus Leistungsgründen, finde ich meinen Code besser lesbar, wenn er nicht voll von Kaskaden von Funktionsaufrufen ist.


Answer #6

Ich werde die "Code Lesbarkeit" nicht auf einige Mikrosekunden opfern.
Vielleicht stimmt es, dass der Getter besser läuft und Sie in der Laufzeit mehrere Mikrosekunden sparen können. Aber ich glaube, Variablen können Sie einige Stunden oder vielleicht Tage sparen, wenn Fehlerbehebungszeit kommt.

Entschuldigung für die nicht technische Antwort.


Answer #7

Niemals für Leistung codieren, immer für Lesbarkeit codieren. Lassen Sie den Compiler die Arbeit machen.

Sie können den Compiler verbessern, um guten Code schneller auszuführen, und plötzlich verlangsamt Ihr "Fast" -Code das System tatsächlich.


Answer #8

Wenn Sie die Entwicklung des Codes im Hinterkopf behalten, werden einfache Getter in v1.0 in v2.0 zu nicht so einfachen Gettern.

Der Coder, der einen einfachen Getter zu einem nicht so einfachen Getter ändert, hat normalerweise keine Ahnung, dass es eine Funktion gibt, die diesen Getter 10 mal statt 1 aufruft und ihn dort nie korrigiert usw.

Aus diesem Grund ist es aus Sicht des DRY-Prinzips sinnvoll, den Wert für die wiederholte Verwendung zu cachen.





performance