zoukankan      html  css  js  c++  java
  • 提升java性能的基本方法

           不要在循环条件中计算

      如果在循环(如for循环、while循环)条件中计算,则没循环一边就会计算一次,这会降低系统效率。

      int i=0,count=10;

      //每次循环都要计算count*2

      while (i<count*2) p="" {<="">

      //do something

      }

      应该替换为:

      //只计算一次

      int total=count*2;

      while (total>i) {

      //do something

      }

      尽可能把变量、方法声明为final static 类型

      假设要将阿拉伯数字转换成中文数字

      public String toChineseNum(int num){

      //中文数字

      String[] cns = { "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };

      return cns[num];

      }

      在这种情况下,把它声明成为一个类变量,并且加上final static 修饰会更加合适,在类加载后就会生成该数组,每次方法调用则不再重新生成数组对象了,这有助于提高系统性能。

      //声明为类变量

      final staticString[] cns = { "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };

      public String toChineseNum(int num){

      //中文数字

      return cns[num];

      }

      缩小变量的作用于范围

      关于变量,能定义在方法内的就定义在方法内,能定义在一个循环体内的就定义在循环体内,能放置在一个try……catch块内的就放置在该块内,其目的是加快GC的回收。

      频繁字符串操作使用StringBuilder或StringBuffer

      虽然String的连接操作(“+”号)已经做了很多优化,广州java培训班但在大量的追加操作上StringBuilder和StringBuffer还是比“+”号性能好很多

      public void Strings(){

      String str="Log file is ready ……";

      for (int i = 0; i < 3; i++) {

      //此处生成三个对象

      str+="log"+i;

      }

      }

      应该修改为:

      public void stringBuilders(){

      StringBuilder sb=new StringBuilder(20000);

      sb.append("Log file is ready ……");

      for (int i = 0; i < 3; i++) {

      sb.append("Log "+i);

      }

      String log=sb.toString();

      }

      使用非线性检索

      如果在ArrayList中存储了大量数据,使用indexOf查找元素会比java.utils.conllections.binarySearch的效率低很多,原因是binarySearch是二分搜索法,而indexOf使用的是逐个元素比对的方法。

      需要注意的是:使用binarySearch搜索时,元素必须进行排序,否则准确性就不可靠了。

      不建立冗余对象

      不需要建立的对象就不能建立,说起来很容易,要完成遵循此规则难度就很大,我们经常就会无意地创建冗余对象,例如这样代码:

      public void doSomething() throws myExecption{

      //异常信息

      String exceptionMsg="出错了!";

      try {

      Thread.sleep(10);

      } catch (InterruptedException e) {

      //转换自定义运行期异常

      throw new myExecption(e,exceptionMsg);

      }

      }

      很明显exceptionMsg 对象不应该声明这里,因为只有当抛异常了才会有这个变量的使用。放在这里只会占用内存上的使用空间,在catch块中定义exceptionMsg方法才是正道:需要的时候才能创建an对象。

  • 相关阅读:
    微引擎的自定义菜单40063错误解决
    jquery 重复事件
    信号量机制DOWN操作和UP操作的详细说明
    每日算法37:Rotate Image (图像旋转)
    讨论嵌入式系统测试方案
    Android 从硬件到应用程序:一步一步爬上去 6 -- 我写的APP测试框架层硬件服务(终点)
    MVC 接受Flash上传图片
    autorun.vbs病毒的清除办法
    【行业翘楚】井田云:化解线上线下冲突让鱼与熊掌皆得
    Tuxedo入门学习
  • 原文地址:https://www.cnblogs.com/gojava/p/3670608.html
Copyright © 2011-2022 走看看