Java 代码性能优化(待完善)

1、使用final修饰符修饰 类、方法
如果指定了一个类为final,则该类所有的方法都是final的。
Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,能够使性能平均提高50%。

2、尽量重用对象,少创建对象
由于Java虚拟机不仅要花时间生成对象,可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。

3、尽量使用局部变量
临时变量都保存在栈中,速度较快。
另外栈中创建的变量,随着方法的运行结束就没了,不需要额外的垃圾回收。

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

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

5、在需要的时候才创建及初始化变量
6、为集合指定初始长度,避免不必要的扩容操作
7、当复制大量数据时,使用System.arraycopy()命令
8、乘法和除法使用移位操作
9、应该尽可能使用array,无法确定数组大小时才使用ArrayList
10、在合适的场景使用单例
11、使用同步代码块替代同步方法
12、不要导入不使用的类,创建不必要的变量
13、使用数据库连接池和线程池
14、使用带缓冲的输入输出流进行IO操作
15、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+""最慢
16、使用最有效率的方式去遍历Map (iterator方式)

Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry<Integer, Integer> entry = entries.next();
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}

17、对资源的close()建议分开操作,避免内存泄露。
18、对于ThreadLocal使用前或者使用后一定要先remove。
线程池技术中线程不销毁,意味着上条线程set的ThreadLocal.ThreadLocalMap中的数据依然存在。
19、异常处理效率低,规避RuntimeException
ArithmeticException可以通过判断除数是否为空来规避
NullPointerException可以通过判断对象是否为空来规避
IndexOutOfBoundsException可以通过判断数组/字符串长度来规避
ClassCastException可以通过instanceof关键字来规避
ConcurrentModificationException可以使用迭代器来规避


Effective Java
http://www.cnblogs.com/xrq730/p/4865416.html

猜你喜欢

转载自blog.csdn.net/Veritas_C/article/details/84252881