http://blog.csdn.net/zkaip1/article/details/43270725?ref=myread
1. StringBuffer代替String
如果知道字符串容量,最好刚开始 StringBuffer buffer = new StringBuffer(30);
2. 初始化的时候分配容量 Vector vect =new Vector(100);
3.优化循环体
Vector vect = new Vector(1000);for( inti=0; i<vect.size(); i++){...}
优化后 =>
int size = vect.size();for( int i=0; i>size; i++){...}
for (int i = 0;i <100000;i++)if (i%10 == 9) {... // 每十次执行一次}优化后=>>>for(inti =0,j =10; i<100000; i++,j--){if(j == 0){... // 每十次执行一次j = 10;}}
4. 对象使用时再创建(new)
应该尽量重复使用一个对象,而不是声明新的同类对象。一个重用对象的方法是改变对象的值,如可以通过setValue之类的方法改变对象的变量达到重用的目的。
5.变量的注意事项
尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack) 中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。
尽量使用静态变量,即加修饰符static,如果类中的变量不会随他的实例而变化,就可以定义为静态变量,从而使他所有的实例都共享这个变量。
6. 方法调用
不影响可读性等情况下,可以把几个小的方法合成一个大的方法。
在方法前加上final,private关键字有利于编译器的优化。
7. 慎用异常处理
异常是Java的一种错误处理机制,对程序来说是非常有用的,但是异常对性能不利。抛出异常首先要创建一个新的对象,并进行相关的处理,造成系统的开销,所以异常应该用在错误处理的情况,不应该用来控制程序流程,流程尽量用while,if等处理。
在不是很影响代码健壮性的前提下,可以把几个try/catch块合成一个。
8.同步
同步主要出现在多线程的情况,为多线程同时运行时提供对象数据安全的机制,应用多线程为了获得性能的提升,应该尽可能减少同步。
如果需要同步的地方,可以减少同步的代码段,如只同步某个方法或函数,而不是整个代码。
9.使用Java系统API
Java的API一般都做了性能的考虑,如果完成相同的功能,优先使用API而不是自己写的代码.
例如:当有大量数据的复制时,应该使用System.arraycopy()
10. I/O过程尽可能使用带有Buffer的类
11. Servlet中尽量不使用同步,不保存太多信息在HttpSession中,如有必要用户退出时清除Session(invalidate())
12. EJB
- 缓存Home接口
- 封装Entity Bean
- 释放有状态的Session Bean
13. 数据库访问
- 使用速度快的JDBC驱动
- 使用JDBC连接池
- 缓存DataSource
- 关闭所有使用的资源
- 大型数据量处理,直接使用SQL
- 缓存经常使用的数据