Lambda 表达式原理
面试官问:"Lambda 表达式是怎么实现的?"
候选人小徐答:"Lambda 会被编译成匿名内部类。"
面试官追问:"是所有的 Lambda 都会生成新的类吗?"
小徐说:"应该是的..."
面试官又问:"那 Lambda 和匿名内部类有什么区别?"
小徐答不上来。
【面试官心理】 这道题考查的是候选人对 Java Lambda 底层实现的理解。能说出 invokedynamic 和 LambdaMetafactory 的候选人,说明对 JVM 字节码有研究。
一、Lambda 不是匿名内部类 🔴
1.1 字节码对比
1.2 invokedynamic 指令
二、Lambda 的实现机制 🔴
2.1 LambdaMetafactory
2.2 两种 Lambda 类型
三、Lambda 捕获机制 🔴
3.1 有效 final(Effectively Final)
3.2 捕获的内存模型
四、Lambda vs 匿名内部类 🟡
4.1 this 引用的区别
五、方法引用 🟡
5.1 四种方法引用
六、性能特点 🟡
6.1 Lambda 的性能开销
七、追问升级
面试官:"JDK 8 的 Lambda 为什么要用 invokedynamic?"
【面试官心理】 能说出 invokedynamic 原因的候选人,说明对 JVM 字节码有研究。这是 P6+ 的加分点。