`
tanghui
  • 浏览: 7321 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

请问这两个循环的性能那个好些?

J# 
阅读更多
求:
for(int i = 100000; i > 0; i–) {}
for(int i = 1; i < 100001; i++) {}
这两个FOR循环哪个执行得更快?


我个人的测试方法为下面的方法,不知道对不对,请高手指教


public class Test {

	/**
	 * @param args
	 */
		static int num = 100000;

		  public static void main(String[] args) {

		    long begin = System.currentTimeMillis();
		    System.out.println("第一种情况开始:"+begin);
		    for (int i = 0; i < num+1; i++) {
		    	
		    }
		    long end = System.currentTimeMillis();
		    System.out.println("第一种情况结束:"+ end);
		    System.out.println("第一种开始和结束的时间差情况:"+ (end - begin));
		    
		    begin = System.currentTimeMillis();
		    System.out.println("第二种情况开始:"+ begin);
		    for (int i = num; i >0; i--) {

		    }
		    end = System.currentTimeMillis();
		    System.out.println("第二种情况结束:"+begin);
		    System.out.println("第二种开始和结束的时间差情况:"+ (end - begin));

		  }

}



运行结果:
第一种情况开始:1268831446250
第一种情况结束:1268831446250
第一种开始和结束的时间差情况:0
第二种情况开始:1268831446250
第二种情况结束:1268831446250
第二种开始和结束的时间差情况:0
1
1
分享到:
评论
3 楼 pouyang 2010-08-28  
下面是编译后的代码
主要区别在于
if_icmpge 15 (+9)  
iinc 1 by 1 


ifle 37 (+9)
iinc 1 by 255 

的区别,其他似乎没什么区别 
2 楼 pouyang 2010-08-28  
 public class D {

	public static void main(String[] args) {
		for ( int j = 0; j < 10000 ; j++ )
		{
		}
		System.out.println("------------");
		for ( int i = 10000; i > 0 ; i -- )
		{
		}
	}
}




0 iconst_0
 1 istore_1
 2 iload_1
 3 sipush 10000
 6 if_icmpge 15 (+9)
 9 iinc 1 by 1
12 goto 2 (-10)
15 getstatic #2 <java/lang/System.out>
18 ldc #3 <------------>
20 invokevirtual #4 <java/io/PrintStream.println>
23 sipush 10000
26 istore_1
27 iload_1
28 ifle 37 (+9)
31 iinc 1 by 255
34 goto 27 (-7)
37 return
1 楼 Curapica 2010-03-19  
这个在C里面是第一种快的,好像是编译成的二进制的,从汇编中看出的原因,信号的问题。java不清楚了,应该是差不多。 记得以前看到的《大内高手系列》里面提过

相关推荐

    C++性能剖析教程之循环展开

    循环展开能从两方面改进程序的性能: 减少了不直接有助于程序结果的操作的数量,例如循环索引计算和分支条件。 提供了一些方法,可以进一步变化代码,减少整个计算中关键路径上的操作数量。 循环展开对程序性能的...

    自行复叠吸收制冷循环等效循环及性能优化

    同时,存在一个最优复叠热量分配系数(optα),决定制冷剂在不同部分的流量分配,以实现最优的循环性能。 7. 制冷剂与工质对:在自行复叠吸收制冷循环中,所使用的制冷剂对会对循环性能产生显著影响。目前,研究中...

    两个for嵌套循环.sh

    两个for嵌套循环

    求两个不同长度序列的循环卷积:求两个不同长度序列的循环卷积-matlab开发

    在MATLAB环境中,实现两个不同长度序列的循环卷积是非常常见的操作。本篇将详细介绍如何在MATLAB中进行这一计算。 首先,我们要理解循环卷积的基本原理。普通线性卷积是两个无限序列的卷积,但在实际应用中,由于...

    汇编语言程序设计之循环程序

    这是一个典型的单重循环程序,循环次数为50次。程序通过初始化CX寄存器为50,然后使用`AGAIN`作为循环标签,每次循环迭代时执行加法操作、更新指针,并使用`DEC CX`减小CX的值。`JNZ AGAIN`指令检查CX是否为0,如果...

    关于循环的一个经典题目(c_c++)

    这两个示例展示了 C/C++ 中 `for` 循环的细节以及条件表达式的处理方式。关键在于理解 `for` 循环的三个组成部分(初始化、条件判断、循环后的操作)以及条件表达式中各个操作符的执行顺序。特别地,对于 `&&` 和 `!...

    c#中list.FindAll与for循环的性能对比总结

    这两种方式在性能上有何差异呢?这篇总结将深入探讨这个问题,并提供实际的测试结果。 首先,`List&lt;T&gt;.FindAll`方法是一个方便的 LINQ 扩展方法,它接受一个谓词(Predicate),即一个返回布尔值的委托,用于判断...

    串口缓冲区 循环队列

    在实现循环队列时,我们可以自定义一个固定大小的缓冲区,并维护两个指针,分别表示队头和队尾。 初始化循环队列时,队头和队尾指针都指向缓冲区的起始位置。当有新的数据到来时,数据被存入缓冲区的队尾位置,并将...

    android两列显示两个listview

    在Android开发中,有时我们需要在一个布局中同时展示两个ListView,以实现类似网格或者并排比较的效果。这个场景在处理比如对比列表数据、显示多类别信息等时非常常见。标题"android两列显示两个listview"指的就是...

    三种差错控制编码在AWGN信道中的性能分析,两种基本差错控制编码,matlab

    本文将深入探讨在Additive White Gaussian Noise (AWGN)信道中,三种主要的差错控制编码——卷积码、循环码和普通线性分组码的性能分析。MATLAB作为一种强大的数学工具,常用于实现这些编码的仿真和性能评估。 1. *...

    ViewPager实现循环滚动切换Fragment

    默认情况下,ViewPager只会加载相邻的两个页面,以提高性能和减少内存消耗。在用户滑动时,它会自动创建新的页面并销毁不再可见的页面。 要实现循环滚动,我们需要扩展`PagerAdapter`并重写其中的关键方法。例如,...

    多线程与循环队列

    在计算机科学中,多线程和循环队列是两个重要的概念,它们在高效并发编程中发挥着关键作用。本文将详细探讨多线程环境下的循环队列应用。 首先,我们来理解多线程。多线程是一种编程模型,允许一个程序同时执行多个...

    C++循环队列模版(数组和链表两种实现方式都有)

    在C++中,循环队列可以使用数组或者链表来实现,这两种方式各有优缺点。下面我们将详细探讨这两种实现方式及其基本功能。 首先,我们来看数组实现的循环队列。数组是最基础的数据结构,它的优点是访问速度快,空间...

    10个经典程序c语言

    通过 `while` 循环依次比较两个字符串中的每个字符,按字母顺序放入 `c` 中。当其中一个字符串处理完毕后,将另一个字符串的剩余部分添加到 `c` 的末尾。 ### 7. 结构体成员的传递与修改 **知识点:** - **结构体*...

    51单片机采用定时器计时循环点亮8个LED小灯

    本项目旨在介绍如何利用51单片机的定时器功能来实现LED小灯的循环点亮,这既是一个基础的硬件控制实践,也是一个良好的学习编程逻辑和理解定时器工作原理的机会。 51单片机内部集成了几个定时器/计数器资源,通常...

    C++ 包含类两个类互相调用彼此的类成员变量和方法

    当我们有两个类A和B,且它们需要互相调用对方的成员时,通常会遇到两个主要问题:前置声明(Forward Declaration)和循环包含(Circular Inclusion)。让我们逐一分析: 1. 前置声明:在类A中使用类B的成员之前,...

    Kettle循环遍历结果集作为参数传入转换.zip

    在"Kettle循环遍历结果集作为参数传入转换.zip"的示例中,我们将探讨这个具体的操作流程和相关知识点。 首先,我们需要了解Kettle的基本结构。Kettle由两个主要部分组成:Job(作业)和Transformation(转换)。...

Global site tag (gtag.js) - Google Analytics