<1>依赖语言     时间是以复制为单位时间


                    运算 示例 标准时间
                    本地赋值 i=n;     1.0
                    实例赋值 this.i=n;     1.2
                    int 增值 i++;        1.5
                    byte 增值 b++; 2.0


short 增值 s++; 2.0

float 增值 f++; 2.0

double 增值 d++; 2.0



空循环 while(true) n++; 2.0





三元表达式 (x<0) ?-x : x 2.2





算术调用 Math.abs(x); 2.5





数组赋值 a[0] = n; 2.7





long 增值 l++; 3.5





方法调用 funct(); 5.9





throw 或catch 异常 try{ throw e; }或catch(e){} 320





同步方法调用 synchMehod(); 570





新建对象 new Object(); 980





新建数组 new int[10]; 3100




<2>特殊情况

        1、字串的开销


                字串连接运算符+看似简单,但实际需要消耗大量系统资源。


禁止新建一个字串缓冲,可节


省980 单位的对象创建时间(如前所述)


        2、同步:


慢10 倍。经JIT 编译器处理后,这一性能 上的 差距提升到50 到100 倍(注意前表总结的时间显示出要慢97 倍)。所以要尽可能避免使用同步方法— —若不能避免, 方法的同步也要比代码块的同步稍快一些。


        3、重复利用对象:


                要花很长的时间来新建一个对象(根据前表总结的时间,对象的新建时间是赋值时间的 980 倍,而新建一个小数组的时间是赋值时间的3100 倍)。因此,最明智的做法是保存和更新老对象的字 段,而不是创建一个新对象。


        4、异常


                将小的try----catch块合并到一起。


        5、散列处理


                价格HashTable(需要造型的以及同步处理)换成HashMap。


        6、I/O


                应尽可能使用缓冲。


        7、使用API 类:


                尽量使用来自Java API 的类,因为它们本身已针对机器的性能进行了优化。这是用Java 难 于达到的。比如在复制任意长度的一个数组时,arraryCopy()比使用循环的速度快得多。


        8、 其他建议


■将重复的常数计算移至关键循环之外——比如计算固定长度缓冲区的buffer.length。

■static final(静态最终)常数有助于编译器优化程序。

■实现固定长度的循环。

■使用javac 的优化选项:-O。它通过内嵌static,final 以及private 方法,从而优化编译过的代码。注

意类的长度可能会增加(只对JDK 1.1 而言——更早的版本也许不能执行字节查证)。新型的“Just-intime”(

JIT)编译器会动态加速代码。

■尽可能地将计数减至0——这使用了一个特殊的JVM 字节码。