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 {

List<String>aList = new ArrayList<String>();

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倍多。

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

 

    

时间: 2025-01-02 17:30:22

JAVA性能调优-在循环条件中不要使用表达式的相关文章

JAVA性能调优- try/catch块和循环

1.JAVA性能调优-将try/catch块移出循环 据说把try/catch块放入循环体内,会极大的影响性能.因为使用了try/catch模块的使用,会让JAVA虚拟机做很多额外的工作.就好比对每个人说,"嗨,哥们,路上可能有蛇.于是听到的人只好手拿木棍,小心翼翼的往前走". 把try/catch块放到循环外面,就好比对一大群人说,"嗨,兄弟们,路上可能有蛇.于是听到的人安排部分人员拿木棍往前走,其他人基本不受影响" 这个理论蛮不错的,测试下对性能的实际影响 2.

Java性能调优笔记

Java性能调优笔记 调优步骤:衡量系统现状.设定调优目标.寻找性能瓶颈.性能调优.衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈).性能调优结束. 寻找性能瓶颈 性能瓶颈的表象:资源消耗过多.外部处理系统的性能不足.资源消耗不多但程序的响应速度却仍达不到要求. 资源消耗:CPU.文件IO.网络IO.内存. 外部处理系统的性能不足:所调用的其他系统提供的功能或数据库操作的响应速度不够. 资源消耗不多但程序的响应速度却仍达不到要求:程序代码运行效率不够高.未充分使用资源.程序结构不合理. C

java性能调优——技客时间

一.java性能调优的标准 cpu:有的应用需要大量计算,他们会长时间.不间断地占用 CPU 资源,导致其他资源无法争夺到 CPU 而响应缓慢,从而带来系统性能问题.例如,代码递归导致的无限循环,正则表达式引起的回溯,JVM 频繁的 FULL GC,以及多线程编程造成的大量上下文切换等,这些都有可能导致 CPU 资源繁忙. 内存:Java 程序一般通过 JVM 对内存进行分配管理,主要是用 JVM 中的堆内存来存储 Java 创建的对象.系统堆内存的读写速度非常快,所以基本不存在读写性能瓶颈.但

java 性能调优工具

1.jstack 用法jstack [option] pid -l long listings,会打印出额外的锁信息,在发生死锁时可以用jstack -l pid来观察锁持有情况 -m mixed mode,不仅会输出Java堆栈信息,还会输出C/C++堆栈信息(比如Native方法) 找出进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid printf "%x\n" pid 得到pid的

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

推荐书籍:《Java性能调优指南》

本书作者是Java性能和Java HotSpot 虚拟机领域的佼佼者,帮助你利用现代软工实践提高性实战生涯中总结能,避免常见错误,从技巧和窍门. 利用G1克服并行.串行和CMS垃圾收集器的局限性了解G1  GC收集的各个阶段,包括年轻代和老年代在G1的引擎下微调您的应用程序确定潜在优化方案,解释实验结果,并付诸行动探索的HotSpot虚拟机内部使用热点VM服务代理分析.分流,并解决不同的热点 <Java性能调优指南>主要展示了如何在当今先进的多核硬件和复杂的操作系统环境下,系统且主动地提高Ja

java 性能调优和GC

JAVA 性能调优和GC http://blog.csdn.net/gzh0222/article/details/7663181 JAVA GC调优手记 http://blog.csdn.net/firecoder/article/details/7225654 JAVA GC 日志详解 http://blog.csdn.net/alivetime/article/details/6895537 JAVA 内存参数设置 http://heipark.iteye.com/blog/1356113

成为Java GC专家(5)—Java性能调优原则

这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程.GC的工作原理.新生代(Young Generation)和老年代(Old Generation)的概念.你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响. 在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效. 第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳

11 个简单的 Java 性能调优技巧

大多数开发人员理所当然地以为性能优化很复杂,需要大量的经验和知识.好吧,不能说这是完全错误的.优化应用程序以获得最佳性能不是一件容易的事情.但是,这并不意味着如果你不具备这些知识,就不能做任何事情.这里有11个易于遵循的建议和最佳实践可以帮助你创建一个性能良好的应用程序. 大部分建议是针对Java的.但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言.在讨论专门针对Java的性能调优技巧之前,让我们先来看看通用技巧. 1.在你知道必要之前不要优化 这可能是最重要的性能调整技巧之一.你