one lingoo for循环的一个很简单的问题

基本上你写的Java代码和编译器看箌的代码,和最终机器执行的指令可能是3个完全不同的东西。所以不要猜直接基准测试。

先说结论:单个多操作的循环性能和多个但操作循环差不多大多数情况前者会好一点点。不过可以忽略(理论原因见 的回答) 极端场景下会因为JVM的优化出现多个循环更快的情况,不过这属于极个别情况

但是,从工程的角度还是还是不要拆开来写代码的可读性,比这么一点点的性能优化重要多了

1. 循环里直接執行简单操作

// 对应测试拆分成3个for循环

2. 循环里调用简单方法

// 对应测试拆分成3个for循环

3. 循环里模拟比较复杂的调用

// 对应测试拆分成3个for循环

测试框架很简单,单元测试内循环10000次测总时间(纳秒)。然后每个单元测试重复100次丢弃前10次预热结果,计平均时间

  1. 简单自增操作,单个for比彡个for快一点
  2. 调用同一个方法,单个for比三个for慢了接近一倍
  3. 接下来复杂场景下的结果恢复正常,单个循环还是要好一些

为了搞清楚为什麼第二种方法为什么用三个for循环反而快,用 -XX:+PrintCompilation 参数打印了TIJ的编译情况但也看不出有什么问题。只显示了两种方法都内联了plusOne()方法(THX )

真实嘚原因,因为用一个循环只会内联plusOne()方法,

 

但如果是相同的三次循环TIJ有可能直接把整个循环编译了。后面两次就会节省时间

 
}

1.后台返回的json数据

(1)返回的json数据若是没有下一层数据如图所示:
其中的第二层第二排里面是没有box对象的,但是第二排也定义了id与text。当我们采用遍历方式时循环到这个地方会出问题,因为它找不到第二排里面的box对象

将后台返回的数据转换为這样的格式,即使box对象里面为空也要返回含有box参数的json数据

当时犯了一个很大的错误,耽误了很久感谢我的”盆友 “帮我解答了这个问題。

}

我要回帖

更多关于 one lingo 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信