jdk1.8 lambda表达式性能分析

jdk1.7加入invokeDynamic指令来支持动态类型。详见https://book.2cto.com/201301/14120.html

jdk1.8加入lambda表达式,实际使用invokeDynamic指令来实现。

 

1 lambda表达式的应用

java的语法出了名的繁杂冗余,使用lambda表达式,代码更简洁,比如集合处理。

 
//元素过滤
List<Entity> filter = entities.stream().filter((e)->{return e.a==0;}).collect(Collectors.toList());
//字段抽取
List<Integer> field = entities.stream().map((e)->{return e.a;}).collect(Collectors.toList());
//list转map
Map<Integer, Entity> map = entities.stream().collect(Collectors.toMap(Entity::getA, e->e));
//map迭代
map.forEach((k,v)->{});
//list迭代
entities.forEach((e)->{});

2 lambda表达式的性能

可以猜想,由于使用invokeDynamic指令,类和方法需要在运行时才解析,比传统的方法调用应该会慢一些,实验一下。

 
public boolean converter(){
	int count = 10000;
	
	Converter<Integer> converter = (inte)->{
		System.out.println(inte);
		};
	
	long startTime = System.currentTimeMillis();
	for(int i=0;i<count;i++){
		converter.convert(i);
	}
	long lambdaCost = System.currentTimeMillis()-startTime;	
	
	Converter<Integer> converterOld = new Converter<Integer>(){
		@Override
		public void convert(Integer t) {
			System.out.println(t);
			}
	};
	
	startTime = System.currentTimeMillis();
	for(int i=0;i<count;i++){
		converterOld.convert(i);
	}
	long normalCost = System.currentTimeMillis()-startTime;
	
	return normalCost>lambdaCost;
}


public static void main(String[] args) {
	int normalWin = 0;
	int total = 10;
	Lambda lambda =  new Lambda();
	for(int i=1;i<=total;i++){
		if(lambda.converter()){
			normalWin++;
		}
	}
	System.out.println("total:"+total+",normal win:"+normalWin);
}
 
total:10,normal win:3
total:10,normal win:5
total:10,normal win:4
total:10,normal win:6
total:10,normal win:7

 

结果显示,使用lambda表达式运行并不比常规调用慢,不相上下,jdk1.8确实给力。

 

此种神器,当多多使用了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值