加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy for循环执行时间

发布时间:2020-12-14 16:34:20 所属栏目:大数据 来源:网络整理
导读:O Groovy Gurus, 该代码段大约在1秒钟内运行 for (int i in (1..10000000)) { j = i; } 而这一次需要近9秒 for (int i = 1; i 10000000; i++) { j = i; } 为什么会这样? 解决方法 好.这是我的理由为什么? 如果将脚本转换为字节码,您将注意到 ForInLoop使用
O Groovy Gurus,

该代码段大约在1秒钟内运行

for (int i in (1..10000000)) {
         j = i;
    }

而这一次需要近9秒

for (int i = 1; i < 10000000; i++) {
         j = i;
    }

为什么会这样?

解决方法

好.这是我的理由为什么?

如果将脚本转换为字节码,您将注意到

> ForInLoop使用范围.迭代器用于在每个循环中前进.比较(<)直接用于int(或Integer)来确定退出条件是否已经满足
> ForLoop使用传统的增量,检查条件,并执行操作.对于检查条件i< 10000000它使用Groovy的ScriptBytecodeAdapter.compareLessThan.如果你深入该方法的代码,你会发现比较的两面都被当做Object,并且有很多事情发生,投射,比较对象等等.

ScriptBytecodeAdapter.compareLessThan – > ScriptBytecodeAdapter.compareTo – > DefaultTypeTransformation.compareTo

类型处理程序包中还有其他类,它们专门用于数学数据类型的compareTo方法,不知道为什么不使用它们(如果没有被使用)

我怀疑这是第二个循环花费更长时间的原因.再次,请纠正我,如果我错了或缺少一些东西…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读