首页  

java8 lambda 原理及性能     所属分类 java8 浏览量 813
函数式接口 functional interface
只包含一个抽象方法的接口

@FunctionalInterface

java.lang.Runnable 和 java.util.Comparator 是典型的函数式接口
void run()
int compare(T o1, T o2);

Lambda语法

(parameters) -> expression 
(parameters) -> { statements; }

javap -c  xxx 查看字节码 

jvm invoke指令

invokeinterface 调用接口方法 
invokespecial   专门用来调用父类方法、私有方法和初始化方法
invokestatic    调用静态方法
invokevirtual   调用对象的一般方法

java7 增加 invokedynamic 指令
用于支持动态语言,允许方法调用在运行时指定类和方法 

字节码中每条invokedynamic指令出现的位置称为一个动态调用点

Lambda 使用 invokedynamic指令



Lambda性能 Java8中 任何一种新方式都会产生约 5 倍的性能差异 使用简单迭代器循环比混合 lambda 表达式和流更有效 这样需要多写几行代码,且需要跳过甜蜜的语法糖(syntactic suger) 并行流 谨慎使用
性能对比 ,差距不是很大 普通 for 循环 稍微快一点 LambdaPerfTest for(指定初始容量) for(不指定初始容量) stream+lambda stream+方法引用 四种方式耗时对比 447 1176 1345 1331 792 1061 1504 1201 782 1002 1214 1206 792 1030 1234 1213 810 1041 1218 1210 812 1004 1260 1286 812 1025 1208 1202 788 1001 1206 1303 833 1072 1367 1237 801 1005 1220 1203 783 1007 1227 1221 797 1012 1234 1202 784 1009 1213 1302 911 1241 1361 1216 788 1013 1238 1204 821 1065 1239 1225 832 1022 1222 1426 809 1014 1218 1209 808 1039 1329 1323 925 1191 1267 1302 875 1024 1221 1233 完整代码 https://gitee.com/dyyx/hellocode/blob/master/src/dyyx/java8/lambda/LambdaPerfTest.java

上一篇     下一篇
aerospike启动指定配置文件

Java8函数式接口

Java8常用函数式接口

aerospike 日志

aerospike ClusterStats 获取连接数信息

alpinelinux