1.程序开发优化
1.循代码编写约定及规范
1.2基础代码优化
1.2.1字符串优化
1.2.1.1使用StringBuffter代替String
例如:
[html] view plain copy
- String s =“a”+”b”+”c”+”d”+”…”;
替换为:
[html] view plain copy
- StringBuffer sb= new StringBuffer();
- 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
- StringBuffer sb = new StringBuffer();①
- //StringBuilder sb = newStringBuilder();②
- Long t1 = new Date().getTime();
- for(int i =0;i<10000000;i++){
- sb.append(“a”);
- }
- Long t2 = new Date().getTime();
- 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
- public static Credit getNewCredit() { returnnew Credit(); }
改进后的代码使用clone()方法,如下所示:
[html] view plain copy
- private static Credit BaseCredit = newCredit();
- public static Credit getNewCredit() {
- return (Credit)BaseCredit.clone();
- }
1.2.3资源关闭
程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。对于稀缺资源的使用问题,像流、数据库连接这种资源使用后一定要关闭。
1.2.4优化循环体
1.2.4.1终止条件先定义
例如:将
[html] view plain copy
- for(int i=0; i<collection.size();i++){… }
替换为:
尽量减少对变量的重复计算
[html] view plain copy
- int n=collection.size();
- for(int i=0; i<n;i++){…}
1.2.4.2大循环放里,小循环放外
例如:将
[html] view plain copy
- for(int j=0; j<1000000;j++){
- for(int i=0; i<10;i++){…}
- }
替换为:
[html] view plain copy
- for(int i=0; i<10;i++){
- for(int j=0; j<1000000;j++){…}
- }
1.2.4.3循环体内不相关计算移到外面
[html] view plain copy
- for(int i=0;terminal=x.length;i<terminal;i++){
- x = x/scaleA *scaleB;
- }
替换为:
[html] view plain copy
- Double scale = scaleB*scaleA;
- for(int i=0;terminal=x.length;i<terminal;i++){
- x = x/scale ;
- }
1.2.4.4循环内不要创建对象缺
例如:
[html] view plain copy
- for(int i=1;i<=100;i++){.
- AuditResult auditResult = new AuditResult();
- }
这种做法会在内存中保存N份这个对象的引用//会浪费大量的内存空间,
替换为:
[html] view plain copy
- AuditResult auditResult;
- for(int i=1;i<=100;i++){
- auditResult=new AuditResult();
- }
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
- import java.io.FileInputStream;
- public class Test {
- void method (FileInputStream fis) {
- for (int i = 0; i < size; i++) {
- try {
- _sum += fis.read();
- } catch (Exception e) {}
- }
- }
- private int _sum;
- }
替换为:
将try/catch块移出循环
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!