Lambda表达式与匿名内部类的区别
所属分类 java8
浏览量 1097
匿名内部类与普通类没有区别
编译器为每个匿名类生成一个新的class文件,文件名格式为className$num
匿名内部类缺点
类加载需要有加载、验证、准备、解析、初始化等过程
大量的内部类将会影响执行的性能,并消耗Metaspace
javap指令反编译class
Lambda 使用invokedynamic指令,而非构建一个新的class
invokedynamic指令 JDK 1.7 JSR 292 引入 ,当时的目的是为了支持Groovy、JRuby等动态类型语言
JDK 1.8中,该指令被用到Lambda表达式实现中
invokedynamic执行步骤
invokedynamic指令行,被称为动态调用点
首次执行该invokedynamic调用时,JVM会调用一个bootstrap方法,并返回一个CallSite的对象,该对象将永久与此动态调用点关联
执行与CallSite关联的MethodHandle指向的方法
使用invokedynamic指令实现Lambda表达式的优点
开销少,没有匿名内部类的初始化过程
仅Lambda表达式首次调用的时候,进行转换和链接,之后的调用会跳过这一步骤
上一篇
下一篇
Java8 Stream 及 常见坑点
java方法引用
OSGI与Java模块化之路
Java方法调用的字节码指令
k8s面试题
top命令输出说明