首页  

Lambda表达式与匿名内部类的区别     所属分类 java8 浏览量 933
匿名内部类与普通类没有区别
编译器为每个匿名类生成一个新的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命令输出说明