Java For循环vs While循环,奇怪的行为和时间性能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java For循环vs While循环,奇怪的行为和时间性能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1907字,纯文字阅读大概需要3分钟。
内容图文
![Java For循环vs While循环,奇怪的行为和时间性能](/upload/InfoBanner/zyjiaocheng/720/f310a63daa44435898513c53ef0c09aa.jpg)
我正在编写一个算法,它在整个数组中从一个整数数组做一个大循环,内部有一个if条件.在第一次条件为假时,可以终止循环.
因此,对于for循环,如果condition为false,则继续使用简单变量进行迭代.
使用while循环,条件为while参数,循环将在条件为false时停止,并应保存一些迭代.
但是,while循环仍然比for循环慢一点!
但是,如果我将一个int值作为计数器,并计算迭代次数,For循环按预期执行了更多的迭代.
但是这次,使用计数器执行mofified For方法的时间比使用计数器的while方法慢得多!
有什么解释吗?
这里带有for循环的代码:
for (int i = pairs.length - 1; i >= 0; i -= 2) {
//cpt++;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
if (duv > delta) {
execute();
}
}
时间执行:6473
用计数器执行时间:8299
迭代计数:2584401
这里带有while循环的代码:
int i = pairs.length - 1;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
while (duv > delta) {
//cpt++;
execute();
u = pairs[i -= 2];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}
时间执行:6632
用计数器执行时间:7163
迭代计数:9793
时间以毫秒为单位,我用不同大小的内容重复实验几次,措施几乎保持不变. execute()方法更新delta值.方法getDistance()只是一个矩阵int [] []访问.
谢谢你的帮助.
解决方法:
在尝试对java执行任何性能测试之前,我强烈建议您阅读本文
http://www.ibm.com/developerworks/java/library/j-benchmark1/index.html
简而言之 – 运行一段时间后,支持Hotspot的JVM可以优化您的代码,这将影响测试结果.因此,您需要使用适当的技术来测试代码的性能.
为了减轻疼痛,有一个用于执行适当测试的库:http://ellipticgroup.com/html/benchmarkingArticle.html
您可以在此页面上找到本文两部分的链接.
更新:为了帮助您更快地开始这里,您需要做的就是:
>下载page上发现的bb.jar,jsci-core.jar,mt-13.jar
>把它们放在classpath上
>重写您的代码,以便while循环方法和for循环方法都进入Runnable或Callable接口的单独实现
>在主方法中只需调用
System.out.println(new Benchmark(new WhileApproach()));
显示while循环的执行时间
System.out.println(new Benchmark(new ForApproach()));
获取for循环的信息
内容总结
以上是互联网集市为您收集整理的Java For循环vs While循环,奇怪的行为和时间性能全部内容,希望文章能够帮你解决Java For循环vs While循环,奇怪的行为和时间性能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。