Почему в байт-коде 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