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

【Java语言】while与for执行效率对比

阅读更多

Java语言】whilefor执行效率对比

 

测试环境(虚拟机版本): sun jdk build 1.6.0_22-b04

 

测试程序

 

/**
 * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC)
 * All rights reserved.
 * Author: Jarg Yee <yeshaoting@gmail.com>
 * http://jarg.iteye.com/
 */
 import java.util.*;
/*
 * 【Java语言】while,for执行效率对比
 */
public class WhileFor
{
	public static void main(String[] args)
	{
		System.out.println(whileTest());
		System.out.println(forTest());

	}

	/** while测试 */
	public static long whileTest()
	{
		int num = Integer.MAX_VALUE;	// 迭代次数
		long sum = 0;					// 保存加法结果

		while((num--)>0)
		{
			sum = sum + num;
		}

		return sum;
	}

	/** for测试 */
	public static long forTest()
	{
		int num=Integer.MAX_VALUE;		// 迭代次数
		long sum = 0;					// 保存加法结果

		for(;(num--)>0;)
		{
			sum = sum + num;
		}

		return sum;
	}
}

 

 

 

 

 

 

 

class文件反编译指令
---------- Java
反编译 ----------

Compiled from "WhileFor.java"
public class WhileFor extends java.lang.Object{
public WhileFor();
  Code:
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return

  LineNumberTable: 
   line 11: 0



public static void main(java.lang.String[]);
  Code:
   0:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:	invokestatic	#3; //Method whileTest:()J
   6:	invokevirtual	#4; //Method java/io/PrintStream.println:(J)V
   9:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   12:	invokestatic	#5; //Method forTest:()J
   15:	invokevirtual	#4; //Method java/io/PrintStream.println:(J)V
   18:	return

  LineNumberTable: 
   line 15: 0
   line 16: 9
   line 18: 18



public static long whileTest();
  Code:
   0:	ldc	#6; //int 2147483647
   2:	istore_0
   3:	lconst_0
   4:	lstore_1
   5:	iload_0
   6:	iinc	0, -1
   9:	ifle	20
   12:	lload_1
   13:	iload_0
   14:	i2l
   15:	ladd
   16:	lstore_1
   17:	goto	5
   20:	lload_1
   21:	lreturn

  LineNumberTable: 
   line 23: 0
   line 24: 3
   line 26: 5
   line 28: 12
   line 31: 20



public static long forTest();
  Code:
   0:	ldc	#6; //int 2147483647
   2:	istore_0
   3:	lconst_0
   4:	lstore_1
   5:	iload_0
   6:	iinc	0, -1
   9:	ifle	20
   12:	lload_1
   13:	iload_0
   14:	i2l
   15:	ladd
   16:	lstore_1
   17:	goto	5
   20:	lload_1
   21:	lreturn

  LineNumberTable: 
   line 37: 0
   line 38: 3
   line 40: 5
   line 42: 12
   line 45: 20



}

 

输出完成 (耗时 0 ) - 正常终止

 

 

 

 

二个函数forTest(),whileTest()分别用于测试for,while性能.
二个函数体都包括迭代次数,保存加法结果,算术求和,返回值四条相同语句,只有循环语句不同
.
forTest()
中用的for循环,whileTest()中的while循环.

 

细数forTest()方法,whileTest()方法反编译后所有的指令数,发现:
二者用去的指令数是一样多,都是21
.
由此可知,Java语言,for,while循环的性能是一样的.

 

这与大家知道的C语言while循环比for循环执行效率高相悖.
其实,C语言中while循环也并不是千遍一律的比for循环执行效率高
.
C
语言中,while,for执行效率对比将在下一篇文章通过查看汇编指令指出.

 

1
1
分享到:
评论

相关推荐

    java语言与面向对象程序设计设计第二版王行言课后答案

    控制流语句如if、switch、for、while等用于决定程序执行顺序。异常处理使用try-catch-finally结构,确保程序的健壮性。集合框架包括List、Set、Queue等接口和ArrayList、HashSet、LinkedList等实现类。IO流处理输入...

    C++,java,Go等语言性能对比

    ### C++, Java, Go 等语言性能对比分析 #### 概述 本文档由 Google 工程师 Robert Hundt 编写,旨在通过一种经验报告的形式,对 C++、Java、Go 和 Scala 四种编程语言进行性能比较。本研究关注于不同语言在容器类...

    JAVA语言版数据结构与算法

    - **流程控制语句**:包括条件语句(`if-else`)、循环语句(`for`, `while`)等,用于控制程序的执行流程。 - **字符串**:介绍字符串类型的使用方法,包括字符串的创建、字符串操作(如连接、截取)等。 - **...

    数据结构与算法(java语言版)

    ### 数据结构与算法(Java语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算**:介绍Java中的基本数据类型,包括整型、浮点型、字符型等,并解释了它们之间的运算规则。 - *...

    数据结构与算法(JAVA语言版)

    - **流程控制语句**:涵盖条件语句(if-else)、循环语句(while、for)等,用于编写具有逻辑判断和重复执行功能的代码。 - **字符串**:介绍如何在Java中处理字符串,包括字符串的创建、拼接以及常用操作方法。 ...

    Java语言高级编程lesson1课件和期末试题参考答案

    Lesson1是学习Java的起点,它可能讲解了变量、数据类型、控制流(if语句、for循环、while循环)、方法定义与调用等基础知识。此外,还可能涉及类的创建与实例化,以及如何使用构造函数初始化对象。 而"参考答案与...

    各种经典算法+Java和C语言的两种实现

    - **优点**:C语言执行效率高,对内存管理有直接控制,适合编写系统级和嵌入式程序。 - **关键字和语法**:`main`函数、`for`和`while`循环、指针操作、结构体、数组等。 - **内存管理**:C语言需要手动分配和...

    数据结构与算法(JAVA语言版)

    ### 数据结构与算法(JAVA语言版):深入解析与实践 #### Java与面向对象程序设计:构建坚实的基础 在《数据结构与算法(JAVA语言版)》一书中,作者首先引领读者进入Java的世界,深入讲解了Java语言的基础知识...

    JAVA_数据结构与算法(JAVA语言版)

    ### JAVA_数据结构与算法(JAVA语言版) #### Java与面向对象程序设计 - **Java语言基础知识** - **基本数据类型及运算** - Java支持八种基本数据类型:四种整型(byte、short、int、long)、两种浮点型(float、...

    JAVA语言版数据结构与算法(中文)

    ### JAVA语言版数据结构与算法(中文) #### Java与面向对象程序设计 ##### Java语言基础知识 **基本数据类型及运算** - Java支持多种基本数据类型,包括整型(`byte`, `short`, `int`, `long`)、浮点型(`float`,...

Global site tag (gtag.js) - Google Analytics