Warum sind statische / Mitgliedsvariablen langsamer als lokale Variablen?

Ich habe diesen Thread gesehen:Geschwindigkeit von im Vergleich zu bedingt

Machte meine eigene Klasse, um die Geschwindigkeit zu überprüfen

public class Question {
static long startTime;
static long elapsedTime;

static String mStatic;
private String mPublic;

public static void main(String[] args) {
    Question q = new Question();
    q.executeGlobal();
    q.executeStatic();
    q.executeLocal();
}

public void executeLocal() {
    String mLocal;
    startTime = System.nanoTime();
    for (int i = 0; i < 1000000000; i++) {
        mLocal = "";
    }
    elapsedTime = System.nanoTime() - startTime;
    System.out.println("Type Local: " + elapsedTime + " ns");

}

public void executeGlobal() {
    startTime = System.nanoTime();
    for (int i = 0; i < 1000000000; i++) {
        mPublic = "";
    }
    elapsedTime = System.nanoTime() - startTime;
    System.out.println("Type Global: " + elapsedTime + " ns");

}

public void executeStatic() {
    startTime = System.nanoTime();
    for (int i = 0; i < 1000000000; i++) {
        mStatic = "";
    }
    elapsedTime = System.nanoTime() - startTime;
    System.out.println("Type Static: " + elapsedTime + " ns");
}

}

Ergebnis:

Type Global: 45693028 ns
Type Static: 43853723 ns
Type Local: 2057505 ns

In der Antwort @Rod_algonquin geantwortet, dass es an der liegtgetstatic/putstatisch Bytecode für statische Variable undgetfield/Putfield Bytecode für die Mitgliedsvariable, die durch Bitverschiebung und Addition berechnet wird.

Zuerst habe ich das nur gedachtObjekte verursacht dies, aber beim Versuch, auf das Grundelement zu verweisen, ist das Ergebnis dasselbelocal variable ist immer nochschneller.

Warum ist diese lokale Variable schneller? mit Ausnahme der Bytecode-Erklärung.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage