让你的java代码性能更好.docx
文本预览下载声明
优化你的java代码性能一、避免在循环条件中使用复杂表达式在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。例子:import java.util.Vector;class CEL {????void method (Vector vector) {????????for (int i = 0; i vector.size (); i++)??// Violation????????????; // ...????}}更正:class CEL_fixed {????void method (Vector vector) {????????int size = vector.size ()????????for (int i = 0; i size; i++)????????????; // ...????}}二、为Vectors 和 Hashtables定义初始大小JVM为Vector扩充大小的时候需要重新创建一个更大的数组,将原原先数组中的内容复制过来,最后,原先的数组再被回收。可见Vector容量的扩大是一个颇费时间的事。通常,默认的10个元素大小是不够的。你最好能准确的估计你所需要的最佳大小。例子:import java.util.Vector;public class DIC {????public void addObjects (Object[] o) {????????// if length 10, Vector needs to expand?????????for (int i = 0; i o.length;i++) {????????????????v.add(o);???// capacity before it can add more elements.????????}????}????public Vector v = new Vector();??// no initialCapacity.}更正:自己设定初始大小。????public Vector v = new Vector(20);??????public Hashtable hash = new Hashtable(10);?参考资料:Dov Bulka, Java Performance and Scalability Volume 1: Server-Side Programming?Techniques Addison Wesley, ISBN: 0-201-70429-3 pp.55 – 57三、在finally块中关闭Stream程序中使用到的资源应当被释放,以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何,finally块总是会执行的,以确保资源的正确关闭。?????????例子:import java.io.*;public class CS {????public static void main (String args[]) {????????CS cs = new CS ();????????cs.method ();????}????public void method () {????????try {????????????FileInputStream fis = new FileInputStream (CS.java);????????????int count = 0;????????????while (fis.read () != -1)????????????????count++;????????????System.out.println (count);????????????fis.close ();????????} catch (FileNotFoundException e1) {????????} catch (IOException e2) {????????}????}}?????????更正:在最后一个catch后添加一个finally块参考资料:Peter Haggar: Practical Java - Programming Language Guide.Addison Wesley, 2000, pp.77-79四、使用System.arraycopy ()代替通过来循环复制数组System.arraycopy () 要比通过循环来复制数组快的多。?????????例子:public class IRB{????void method () {????????int[] array1 = new int [100];????????for (int i = 0;
显示全部