for循环优化_Java8的forEach效率真的不如for循环吗

前段时间在论坛里看到有同学做过实验,对for循环和forEach循环每个执行一千万次,for循环耗时7.864毫秒,forEach循环耗时23.638毫秒,然后得出结论for循环的性能远远大于forEach循环,我觉得这是不严谨的。

首先JVM的Hot Spot采用JIT技术,它会将运行频率很高的字节码直接编译为机器指令以提高性能;其次JVM执行某一方法或遍历循环的次数越多就会越了解代码结构并作出相应的优化。

JMH 简介

JMH是代码基准测试的工具套件,精度可以达到纳秒级。该工具是Oracle实现JIT的大牛们编写,我相信他们比任何人都了解JIT以及JVM对基准测试的影响。JDK9自带JMH,我的版本是JDK8,需要引入依赖

b8a1fafc7b3cc005cc0781203dcedcc5.png

基准测试类

基准测试类如下,增强的for循环和forEach分别循环一千万次,循环体里面执行3个操作,转小写字母,转大写字母和计算哈希码。

6a82ae7b7fa0365ce5be462430463b7a.png

测试结果

9bd1c0d37bc29c0122782773c4c85037.png

从测试结果可以看出,增强的for循环耗时846.347毫秒,而forEach耗时842.518毫秒,差别不大,甚至forEach要稍微优于增强的for循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值