java性能优化

  1. 尽量指定类、方法的final修饰符

    如果修饰一个类为final,则该类中的所有方法均为final的。

    final修饰可以让类不能被继承,方法不可以被重写

    java编译器会寻找机会内联所有的final方法,内联对于提高java运行效率意义重大

  2. 尽量重用对象

  3. 尽量使用局部变量

    调用方法是传递的参数以及在方法中定义的变量均保存在栈中,速度快,且运行结束后,自动销毁,不需要垃圾回收

  4. 及时关闭流

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

     java对方法的调用,及时只有一句语句,也是有消耗的,所以写法上建议如下:

  6. for(int i=0;i<list.size();i++){...}

    建议改为:

  7. for(int i=0,int length=list.size();i<length;i++){...}
  8. 尽量使用懒加载,即在需要的时候才创建

    如:String str = "aaa";if(i==1){list.add(str);

    改为:if(i==1){String str="aaa";list.add(str);}

  9. 慎用异常

    异常对性能不利。抛出异常首先要创建一个对象,所以只要异常被抛出,java虚拟机就必须调整调用堆栈。因此,异常只能用于错误处理,不应该用来控制程序流程

  10. 不要在循环中使用try...catch...,应该将其放在最外层

  11. 当复制大量数据时,使用System.arraycopy()命令

  12. 乘法和除法尽量使用移位操作

    a * 8  ==  a<<<3 (左移3位)

    a / 2  ==  a>>>1(右移1位)

  13. 尽量使用HashMap,ArrayList,StringBuilder,除非线程安全需要。

  14. 数组的定义:不要使用public static final,因为无意义,修饰为final,该数组依然可以被修改,而修饰为public,则意味着这是一个安全漏洞,因为该数组可以被外部类改变

  15. 及时清理不需要的session。

    当服务器需要保存较多session,如果内存不足,则会将部分session保存到磁盘上,而保存磁盘意味着要将数据序列化,在大规模集群中,序列化相当昂贵,因为对不需要的session,及时调用HttpSession的invalidata()方法。

  16. 使用同步代码块代替同步代码方法

  17. 将常量声明为static final,并以大写命名

    java虚拟机的提前机制,如果内容为不可变,则java虚拟机会在编译时将内容放在常量池中,避免运行时计算生成常量的值。

  18. 对于close()操作建议分开操作

    如:try{xxx.close();yyy.close()}catch(Exception e){}

    建议改为:try{xxx.close();}catche(Exception e){} try{yyy.close();}catch(Exception e){}



你可能感兴趣的:(java性能优化)