您好我想了解使用Lambda表達式的優勢,其中我聽說JVM使用invokeDynamic byteCode來執行lambda表達式將提高與XXXX相比的性能(對不起,我不知道,它可能是一個匿名內部類)。爲什麼Java-8 lambda需要invokeDynamic byteCode來調用接口方法
我的問題是爲什麼Lambda表達式需要invokeDynamic byteCode。
例如:
public class LambdaTest {
public static void main(String[] args) {
MathOperation addition = (int a, int b) -> a + b;
addition.operation(1, 2);
}
private static int operate(int a, int b, MathOperation operation){
return operation.operation(a, b);
}
interface MathOperation {
int operation(int a, int b);
}
}
其中λ表達式(int a, int b) -> a + b;
可以簡單地脫糖到像
private static int lambda$1(int a, int b) {
return a + b;
}
一個靜態方法,其最終可使用invokstatic
的byteCode右被調用?
更多問題:什麼是lambda表達式嘗試實現的動態性,當所有參數類型返回類型都是在編譯時自身定義的。
例如:在lambda
表達式(int a, int b) -> a + b;
的一切(argument type, return type
)在編譯時自己定義了吧?