Heim >Java >javaLernprogramm >## Ist der Aufruf von „array.length' in einer for-Schleife ein Leistungsengpass?

## Ist der Aufruf von „array.length' in einer for-Schleife ein Leistungsengpass?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 00:38:02864Durchsuche

## Is Calling `array.length` in a for Loop a Performance Bottleneck?

Die Kosten für den Aufruf von array.length

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?

Die Antwort

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn