项目优化方案

1.程序开发优化

1.循代码编写约定及规范

1.2基础代码优化

1.2.1字符串优化

1.2.1.1使用StringBuffter代替String

例如:

[html] view plain copy

  1. String s =“a”+”b”+”c”+”d”+”…”;  

替换为:

[html] view plain copy

  1. StringBuffer sbnew StringBuffer();  
  2. sb.append(“a”).append(“b”).append(“c”).append(“d”).append(“…”);  

1.2.1.2 区别StringBuffer 和StringBuilder

StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用 java.lang.StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

例如:

[html] view plain copy

  1. StringBuffer sb = new StringBuffer();①  
  2. //StringBuilder sb = newStringBuilder();②  
  3.         Long t1 = new Date().getTime();  
  4.         for(int i =0;i<10000000;i++){  
  5.             sb.append(“a”);  
  6.         }  
  7.     Long t2 = new Date().getTime();  
  8.     System.out.println(“耗时:”+(t2-t1)+”ms”);  

①  输出结果:耗时: 549ms

②  输出结果:耗时: 349ms

 

1.2.2对象的创建

尽最大努力少New新对象,用new关键词创建类的实例时,构造函数链中的所有构造函数都会被自动调用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法。clone()方法不会调用任何类构造函数。

在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单。例如,下面是Factory模式的一个典型实现:

[html] view plain copy

  1. public static Credit getNewCredit() { returnnew Credit(); }   

改进后的代码使用clone()方法,如下所示:

[html] view plain copy

  1. private static Credit BaseCredit = newCredit();  
  2.    public static Credit getNewCredit() {  
  3.      return (Credit)BaseCredit.clone();   
  4. }  

1.2.3资源关闭

程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。对于稀缺资源的使用问题,像流、数据库连接这种资源使用后一定要关闭。

1.2.4优化循环体

1.2.4.1终止条件先定义

例如:将

[html] view plain copy

  1. for(int i=0; i<collection.size();i++){… }  

  替换为:

     尽量减少对变量的重复计算

 

[html] view plain copy

  1. int n=collection.size();  
  2. for(int i=0; i<n;i++){…}  

1.2.4.2大循环放里,小循环放外

例如:将

[html] view plain copy

  1. for(int j=0; j<1000000;j++){  
  2.  for(int i=0; i<10;i++){…}  
  3.  }  

替换为:

[html] view plain copy

  1. for(int i=0; i<10;i++){  
  2.    for(int j=0; j<1000000;j++){…}  
  3.   }  

1.2.4.3循环体内不相关计算移到外面

[html] view plain copy

  1. for(int i=0;terminal=x.length;i<terminal;i++){  
  2. x = x/scaleA *scaleB;  
  3. }  

替换为:

[html] view plain copy

  1. Double scale = scaleB*scaleA;  
  2. for(int i=0;terminal=x.length;i<terminal;i++){  
  3. x = x/scale ;  
  4. }  

1.2.4.4循环内不要创建对象缺

例如:

[html] view plain copy

  1. for(int i=1;i<=100;i++){.             
  2. AuditResult auditResult = new AuditResult();  
  3. }  

这种做法会在内存中保存N份这个对象的引用//会浪费大量的内存空间,

替换为:

[html] view plain copy

  1. AuditResult auditResult;  
  2. for(int i=1;i<=100;i++){  
  3. auditResult=new AuditResult();  
  4. }  

1.2.4.5避免循环里面进行数据库操作

1.2.4.6 避免循环里面进行文件读写操作

1.2.4.7将try/catch块移出循环

把try/catch块放入循环体内,会极大的影响性能,如果编译JIT(Just-In-TimeCompiler,即时编译器。)被关闭或者你所使用的是一个不带JIT的JVM,性能会将下降21%之多!        

例子:        

[html] view plain copy

  1. import java.io.FileInputStream;  
  2. public class Test {  
  3.    void method (FileInputStream fis) {  
  4.        for (int i = 0; i < size; i++) {  
  5.            try {  
  6.                 _sum += fis.read();  
  7.            } catch (Exception e) {}  
  8.        }  
  9.     }  
  10.    private int _sum;  
  11. }   

       

替换为:        

将try/catch块移出循环        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2014年6月13日
下一篇 2014年6月13日

相关推荐