it-swarm.com.de

Gibt es einen Leistungsgrund, um Methodenparameter in Java als final zu deklarieren?

Gibt es einen Leistungsgrund, um Methodenparameter in Java als final zu deklarieren?

Wie in:

public void foo(int bar) { ... }

Gegen:

public void foo(final int bar) { ... }

Angenommen, bar wird nur in foo() gelesen und nie geändert.

117
Kip

Das letzte Schlüsselwort wird in der Klassendatei für lokale Variablen und Parameter nicht angezeigt. Daher kann es die Laufzeitleistung nicht beeinträchtigen. Es wird nur verwendet, um die Absicht des Programmierers zu verdeutlichen, dass die Variable nicht geändert wird (was viele als zweifelhaften Grund für ihre Verwendung ansehen) und sich mit anonymen inneren Klassen befasst.

Es gibt viele Auseinandersetzungen darüber, ob der letzte Modifizierer der Methode selbst einen Leistungsgewinn aufweist, da die Methoden ohnehin zur Laufzeit vom optimierenden Compiler eingebunden werden, unabhängig vom Modifizierer. In diesem Fall sollte es auch nur verwendet werden, um das Überschreiben der Methode einzuschränken.

95
Robin

Der einzige Vorteil eines endgültigen Parameters besteht darin, dass er in anonymen verschachtelten Klassen verwendet werden kann. Wenn ein Parameter nie geändert wird, erkennt der Compiler dies bereits als Teil seines normalen Betriebs, auch ohne den letzten Modifikator. Es kommt ziemlich selten vor, dass Fehler durch eine unerwartete Zuweisung eines Parameters verursacht werden. Wenn Ihre Methoden groß genug sind, um diese Entwicklungsstufe zu benötigen, sollten Sie sie verkleinern. Aufgerufene Methoden können Ihre Parameter nicht ändern.

14

Nur ein weiterer Punkt, der über dem der Verwendung nicht endgültiger lokaler Variablen, die in der Methode deklariert wurden, liegt: Die Instanz der inneren Klasse überlebt möglicherweise den Stack-Frame, sodass die lokale Variable möglicherweise verschwindet, während das innere Objekt noch lebt

0
user666

Compiler, die nach dem Laden der Klasse ausgeführt werden, z. B. JIT-Compiler, können die endgültigen Methoden nutzen. Folglich können für final deklarierte Methoden einen gewissen Leistungsvorteil haben.

http://www.javaperformancetuning.com/tips/final.shtml

Oh und noch eine gute Ressource

http://mindprod.com/jgloss/final.html

0
branchgabriel