Почему статическая переменная / член медленнее локальной переменной?

Я видел эту тему:Скорость по сравнению с условной

Сделал свой собственный класс для проверки скорости

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");
}

}

Результат:

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

В ответ @Rod_algonquin ответил, что это из-заgetstatic/putstatic байт-код для статической переменной иGetField/putfield Байт-код для переменной-члена, которую он вычисляет путем сдвига битов и некоторого дополнения.

Сначала я думал, что толькоОбъекты вызывает это, но при попытке ссылаться на примитив результат тот жеlocal variable все ещеБыстрее.

Почему эта локальная переменная быстрее? кроме объяснения байт-кода.

Ответы на вопрос(3)

Ваш ответ на вопрос