Javaバイトコードでは、レシーバーが最初にスタックにプッシュされ、その後にすべてのパラメーターがプッシュされるのはなぜですか? 効率と関係があることを覚えているようです。
これは、メソッド呼び出しと設定フィールドの両方に当てはまります。
メソッド呼び出し
class X {
int p(int a) {
//Do something
}
int main() {
int ret = p(1);
}
}
Main メソッドは次のようにコンパイルされます。
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;
}
}
Main メソッドは次のようにコンパイルされます。
aload_0 // Load this onto the stack
iconst_1 // Load constant 1 onto the stack
putfield <int x> from class X