`
tanghui
  • 浏览: 7287 次
  • 性别: 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不清楚了,应该是差不多。 记得以前看到的《大内高手系列》里面提过

相关推荐

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

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

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

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

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

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

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

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

    python多线程实现同时执行两个while循环的操作

    在本题中,我们关注的是如何使用多线程来同时执行两个`while`循环。这通常适用于需要并行处理不同任务的场景,例如播放音乐和视频。 首先,我们要引入必要的库,包括`time`用于控制时间,`threading`用于处理线程,...

    kettle设置循环变量

    2. 使用 Trans 脚本实现遍历查询出的表名:由于 Kettle 变量一次只能接收一个值,因此若是要执行查询操作的表为两个或者两个以上,就无法直接使用变量来替换 ${TABLENAME}。需要一个能够存储多个表名的步骤或脚本...

    QPSKcyclic.rar_三维 搜索_三维谱_循环谱 qpsk_循环谱QPSK_循环谱检测

    总的来说,这个资源提供了对QPSK信号进行高效循环谱检测的工具,避免了传统三维搜索的复杂性,这对于理解和优化QPSK通信系统的性能,尤其是在信号捕获和同步阶段,有着重要的实用价值。通过深入研究和应用这个程序,...

    循环嵌套案例.rar

    例如,在一个`for`循环中嵌套一个`while`循环,或者两个`for`循环相互嵌套。 二、循环嵌套的应用场景 1. 遍历矩阵或数组:当需要对二维或多维数组进行逐行逐列遍历时,通常会用到循环嵌套。例如,遍历一个二维数组...

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

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

    串口缓冲区 循环队列

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

    两个链表合并的三种方法

    这与循环方法类似,通过迭代两个链表来合并,但是可能使用单独的辅助函数来处理合并操作,而不是在主函数中直接完成。 ```c nod *merge(nod *head1, nod *head2); // 在主函数中调用 merge 函数进行合并 ``` 这种...

    android两列显示两个listview

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

    C++ For循环优化版

    C++循环冒泡法优化 在看到for循环冒泡排序(c++) 后 再次优化了一下,它的程序不能运行,我运行优化的成功了,对初学者理解有很大帮助(还有注释)

    ViewPager实现循环滚动切换Fragment

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

    c++多项式--循环链表

    循环链表是一种特殊的数据结构,它允许节点的最后一个元素指向序列的第一个元素,形成一个无限循环,这使得在处理某些问题时更为高效。 首先,让我们深入理解循环链表。循环链表与传统的线性链表的主要区别在于,它...

    JS 测试循环运行的时间

    综上所述,"JS 测试循环运行的时间"这一主题涵盖了JavaScript性能优化的基本方法,包括使用`console.time()`、`console.timeEnd()`和`performance.now()`API来测量代码执行时间,以及分析源码以发现性能问题。...

    51单片机实现数码管循环显示00~99字样,到99后返回00重新显示,时间间隔为100ms。

    使用8个数码管中的任意相邻两个,实现数码管循环显示00~99字样,到99后返回00重新显示,数字变化的时间间隔为100ms。

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

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

Global site tag (gtag.js) - Google Analytics