Heim >Java >javaLernprogramm >## Ist der Aufruf von „array.length' in einer for-Schleife ein Leistungsengpass?
Beim Ersetzen von for-Schleifen durch for-each-Schleifen stoßen Entwickler häufig auf das folgende Muster:
<code class="java">for (int i = 0, n = a.length; i < n; i++) { ... }</code>
Anstelle des einfacheren:
<code class="java">for (int i = 0; i < a.length; i++) { ... }</code>
Dies wirft die Frage auf: Ist die zusätzliche n = a.length-Zuweisung ein Leistungseinbruch für Arrays?
Nein , ein Aufruf von array.length ist eine O(1)- oder konstante Zeitoperation.
Die .length-Eigenschaft eines Arrays ist ein öffentliches letztes Mitglied und der Zugriff darauf ist nicht langsamer als auf eine lokale Variable. Dies ist anders als bei Methodenaufrufen wie size(), die normalerweise mehr Overhead mit sich bringen.
Moderne JIT-Compiler können den Aufruf von .length auch optimieren, um ihn vollständig zu eliminieren. Um dies zu überprüfen, kann man den Quellcode des JIT-Compilers oder den ausgegebenen nativen Code untersuchen.
Der JIT-Compiler ist jedoch möglicherweise nicht immer in der Lage, diese Optimierung durchzuführen, beispielsweise wenn das Debuggen aktiviert ist oder wann Der Schleifenkörper enthält übermäßig viele lokale Variablen.
Das obige ist der detaillierte Inhalt von## Ist der Aufruf von „array.length' in einer for-Schleife ein Leistungsengpass?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!