浏览 2008 次
锁定老帖子 主题:Java优化编程
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-07-04
方法的同步需要消耗相当大的资料,在一个循环中调用它绝对不是一个好主意。 例子: import java.util.Vector; public class SYN { public synchronized void method (Object o) { } private void test () { for (int i = 0; i < vector.size(); i++) { method (vector.elementAt(i)); // violation } } private Vector vector = new Vector (5, 5); } 更正: 不要在循环体中调用同步方法,如果必须同步的话,推荐以下方式: import java.util.Vector; public class SYN { public void method (Object o) { } private void test () { synchronized{//在一个同步块中执行非同步方法 for (int i = 0; i < vector.size(); i++) { method (vector.elementAt(i)); } } } private Vector vector = new Vector (5, 5); } 将try/catch块移出循环 把try/catch块放入循环体内,会极大的影响性能,如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM,性能会将下降21%之多! 例子: import java.io.FileInputStream; public class TRY { void method (FileInputStream fis) { for (int i = 0; i < size; i++) { try { // violation _sum += fis.read(); } catch (Exception e) {} } } private int _sum; } 更正: 将try/catch块移出循环 void method (FileInputStream fis) { try { for (int i = 0; i < size; i++) { _sum += fis.read(); } } catch (Exception e) {} } 参考资料: Peter Haggar: "Practical Java - Programming Language Guide". Addison Wesley, 2000, pp.81 – 83 不要在循环体中实例化变量 在循环体中实例化临时变量将会增加内存消耗 例子: import java.util.Vector; public class LOOP { void method (Vector v) { for (int i=0;i < v.size();i++) { Object o = new Object(); o = v.elementAt(i); } } } 更正: 在循环体外定义变量,并反复使用 import java.util.Vector; public class LOOP { void method (Vector v) { Object o; for (int i=0;i<v.size();i++) { o = v.elementAt(i); } } } 尽可能的使用栈变量 如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。 例子: public class USV { void getSum (int[] values) { for (int i=0; i < value.length; i++) { _sum += value[i]; // violation. } } void getSum2 (int[] values) { for (int i=0; i < value.length; i++) { _staticSum += value[i]; } } private int _sum; private static int _staticSum; } 更正: 如果可能,请使用局部变量作为你经常访问的变量。 你可以按下面的方法来修改getSum()方法: void getSum (int[] values) { int sum = _sum; // temporary local variable. for (int i=0; i < value.length; i++) { sum += value[i]; } _sum = sum; } 参考资料: Peter Haggar: "Practical Java - Programming Language Guide". Addison Wesley, 2000, pp.122 – 125 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |