`
tanghui
  • 浏览: 7308 次
  • 性别: 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++性能剖析教程之循环展开

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

    数码管循环显示学号(可选一个数码管显示和两个数码管显示,包含程序和proteus仿真).rar

    有两个功能,分别做了两个函数,function1和function2 function1实现第一个功能,function2实现第二个功能 按键设置了0到15共16个按键,程序里只读取0和1两个按键 读取到0走function1,读取到1走function2,用的...

    两个for嵌套循环.sh

    两个for嵌套循环

    二相混合式步进电机闭环矢量SVPWM控制simulink仿真模型 参考文献: 1 两相混合式步进电机高?性能闭环驱动?系统研

    二相混合式步进电机闭环矢量SVPWM控制simulink仿真模型 ...性能闭环驱动?系统研究 汪全俉 [2] 两相 SVPWM 技术在位置跟踪伺服系统中的应用 刘源晶,杨向宇,赵世伟 [3] 二相混合式步进电动机传递函数模型推导

    (15_7)循环码的编译码方法

    循环码编码原理可以分为两个步骤:信息比特流到多项式的转换和多项式到循环码的转换。循环码编码原理的目的是将信息比特流转换为一个可靠的循环码,从而提高信息传输的可靠性和有效性。 五、循环码的纠错原理 循环...

    车辆循环工况数据共47个

    NEDC是一种标准化测试,包括城市和郊区两个部分,但因其过于理想化,已逐渐被更贴近现实的WLTC取代。WLTC分为低、中、高三段,覆盖了更广泛的驾驶行为。 中国自2016年起开始采用WLTC工况,这是一套全球统一的测试...

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

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

    Kettle实现步骤循环执行

    2. 使用`Transformation Executor`(转换执行器):在Job中,如果需要循环执行一个Transformation,可以使用这个组件,并设置相应的循环参数。 3. 在Transformation内部使用`Step Meta`(步骤元数据)和`Copy Rows ...

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

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

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

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

    kettle另一种简单的循环方式

    Kettle通过Job和Transformation两个主要组件来执行数据处理任务。Job是更高层次的工作流程,它包含一系列的Transformation以及控制它们之间执行顺序的步骤。而Transformation则专注于数据转换,即对数据进行清洗、...

    串口缓冲区 循环队列

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

    android两列显示两个listview

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

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

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

    ViewPager实现循环滚动切换Fragment

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

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

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

    C语言循环练习题(共23题)

    实现这个功能的关键是使用`for`或`while`循环,每次比较当前输入的数与已知最大值,更新最大值。 2. **素数判断**: - 练习要求判断输入的正数是否为素数。通过`for`循环遍历从2到输入数-1的所有数,如果输入数能...

    UGUI ScrollRect滚动优化:无限循环利用Item

    然而,在处理大量数据时,如果每个Item都直接实例化并渲染,会消耗大量的内存和GPU资源,降低游戏性能。这就是"UGUI ScrollRect滚动优化:无限循环利用Item"所要解决的问题。 首先,理解"无限循环利用Item"的概念。...

Global site tag (gtag.js) - Google Analytics