java 程序优化

来源:互联网 发布:usb端口电源限制怎么办 编辑:程序博客网 时间:2024/06/06 16:54

1.       尽量使用局部变量,应为局部变量是存放在栈内的,而JVM 正是基于栈的。所以访问

栈内的数据非常快。而全局变量是存放在常量池中的。访问起来要慢23倍。

调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量,实例变量等,都在堆(Heap)中创建,速度较慢。

Java 代码:

Public class test(){

 Int  a = 0 ;

Public  void add(){

  Int I  =a;

For(int j = 0 ;j<5;j++){

 V = v+j;

}

 a=v;

}

}

2.       在循环中循环的要尽量减少计算,因为反复的循环再加上反复的计算会使程序的效率降低。

  Java 代码:

  Int  size  = list.size();

  For(int i=0;i<size;i++){

  // do something

}

 

注意这里的size 来取代list.size();

3.       利用位移来替代乘除。可使运行的速度大大加快。

  实例: a*8 换成 a<<3

位移一位代表乘以2,左移三位代表乘以8,相反右移以为代表除以2.

4.

 

    Try –catch 优化

     以下代码更容易被编译器优化

     try {

some.method1();

some.method2();

some.method3();

} catch( method1Exception e ) {

// Handle exception 1

} catch( method2Exception e ) {

// Handle exception 2

} catch( method3Exception e ) {

// Handle exception 3

}

5.尽量使用final修饰符。在java 核心API 中有许多应用 final的例子,例如 java.lang.String String类指定final防止使用者覆盖length()方法。另外如果一个类是final的,则该类的所有方法都是final的,java 编译器会寻找机会防止内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%.

 6. 尽量重用对象

特别是String 对象的使用中,出现字符串连接情况的使用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理。因此生成过多的对象将会给程序带来很大的影响。

7.java + Oracle的应用系统开发中,java中内嵌的sql语言应尽量使用大写的形式,以减少Oracle 解析器的解析负担。

8. java 编程过程中,进行数据库连接,I/O流操作,在使用完毕后,及时关闭以释放资源。应为对这些大对象的操作会造成系统的大开销。

9.过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时的回收具有重要的意义。

  JVMGC并非十分的只能,因此建议使用对象完毕后,手动设置成null.

 

10.在使用同步机制时,应尽量使用方法同步代替代码块同步。

11. 不要在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层。
Error
是获取系统错误的类,或者说是虚拟机错误的类。不是所有的错误Exception都能获取到的,虚拟机报错Exception就获取不到,必须用Error获取。

12. 当复制大量数据时,使用System.arraycopy();

13. 不要将数组声明为:public static final

14. HaspMap的遍历。
Map<String, String[]> paraMap = new HashMap<String, String[]>();
for( Entry<String, String[]> entry : paraMap.entrySet() )
{
    String appFieldDefId = entry.getKey();
    String[] values = entry.getValue();
}
利用散列值取出相应的Entry做比较得到结果,取得entry的值之后直接取keyvalue

15. StringBuffer,StringBuilder的区别在于:java.lang.StringBuffer线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用StringBuilder类,因为她支持所有相同的操作,但由于她不执行同步,所以速度更快。为了获得更好的性能,在构造StringBufferStringBuilder时应尽量指定她的容量。当然如果不超过16个字符时就不用了。
相同情况下,使用StringBuilder比使用StringBuffer仅能获得10%~15%的性能提升,但却要冒多线程不安全的风险。综合考虑还是建议使用StringBuffer

16. 考虑使用静态方法,
如果你没有必要去访问对象的外部,那么就使你的方法成为静态方法。她会被更快地调用,因为她不需要一个虚拟函数导向表。这同事也是一个很好的实践,因为她告诉你如何区分方法的性质,调用这个方法不会改变对象的状态。

                                                            

原创粉丝点击