java比较不用循环_JAVA性能调优-在循环条件中不要使用表达式

1、JAVA性能调优-在循环条件中不要使用表达式

我们在学习JAVA性能调优的时候,经常能看到这一的一段话:在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。

import java.util.vector;

class cel {

void method(vector vector) {

for (int i= 0; i < vector.size (); i++)  //violation

; //...

}

}

更正:

class cel_fixed {

void method(vector vector) {

int size =vector.size ()

for (int i= 0; i < size; i++)

; //...

}

}

逻辑上看起来非常有道理,只是效率的提升大概有多少,用代码来测试下:

2、循环条件中是否有表达式对比测试的源代码

package com.java.test;

import java.util.ArrayList;

import java.util.List;

/**

*使用预热模式

* JVM参数:-XX:PrintCompilation

*目标:测试在循环中,循环条件会被反复计算对性能的影响

* @author范芳铭

*/

public class EasyLoopParamTest {

ListaList = new ArrayList();

public staticvoid main(String[] args) throws Exception{

intwarmUpCycles = 100000; //预热次数

inttestCycles   = 200000; //正式执行次数

EasyLoopParamTestse = new EasyLoopParamTest();

System.out.println("...预热循环开始 ...");

longcomputeTime = se.runComputeParam(warmUpCycles);

long fixTime= se.runFixParam(warmUpCycles);

System.out.println("...预热结束");

System.out.println("...预热阶段,动态计算循环调整的平均耗时: " + computeTime);

System.out.println("...预热阶段,固定参数的平均耗时:" + fixTime);

System.out.println("...进入正式循环 ...");

computeTime= se.runComputeParam(testCycles);

fixTime =se.runFixParam(testCycles);

System.out.println("...正式运行阶段,动态计算循环调整的平均耗时: " + computeTime);

System.out.println("...正式运行阶段,固定参数的平均耗时:" + fixTime);

}

//给队列中加入1万个元素

publicEasyLoopParamTest(){

for (inti=0; i< 10000 ; i ++){

aList.add(String.valueOf(i));

}

}

//一个在循环中,循环条件会被反复计算

private longrunComputeParam(int iterations){

//开始计时

longstartTime = System.nanoTime();

for(int loop= 0 ; loop < iterations ;  loop ++){

for (inti = 0; i < aList.size(); i++){

//简化内部逻辑

}

}

//计时完成

longelapsedTime = System.nanoTime();

return(elapsedTime - startTime) / iterations;

}

//另外一个在循环中,循环条件不变

public longrunFixParam(int iterations){

//开始计时

longstartTime = System.nanoTime();

int size =aList.size();

for(int loop= 0 ; loop < iterations ;  loop ++){

for (inti = 0; i < size; i++){

//简化内部逻辑

}

}

//计时完成

longelapsedTime = System.nanoTime();

return(elapsedTime - startTime) / iterations;

}

}

3、运行结果

...预热循环开始 ...

...预热结束

...预热阶段,动态计算循环调整的平均耗时: 60456

...预热阶段,固定参数的平均耗时: 3537

...进入正式循环 ...

...正式运行阶段,动态计算循环调整的平均耗时: 41578

...正式运行阶段,固定参数的平均耗时: 3493

4、结论

在循环中,循环条件会被反复计算,如果不使用复杂表达式,那么效率的提升是11倍多。

如果在应用中有大量类似的循环,经过这个小小调整,系统的整体性能都会有可观的提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值