Порядок байт-кода Java для этого и параметров в стеке

Почему в байт-коде java сначала в стек помещается получатель, а затем все параметры? Кажется, я помню, что это как-то связано с эффективностью.

Это справедливо как для вызовов методов, так и для полей настроек.

Вызов метода

class X {

    int p(int a) {
        //Do something
    }
    int main() {
        int ret = p(1);
    }

}

Основной метод компилируется в:

aload_0 // Load this onto the stack
iconst_1 // Load constant 1 onto the stack
invokevirtual <int p(int)> from class X

Установка поля:

class X {
    int x;
    int main() {
        x = 1;
    }

}

Основной метод компилируется в:

aload_0 // Load this onto the stack
iconst_1 // Load constant 1 onto the stack
putfield <int x> from class X
7
задан Jonathan Evans 12 May 2012 в 17:24
поделиться