java性能优化方法
2014-07-19 17:15
246 查看
<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、字串的开销
字串连接运算符+看似简单,但实际需要消耗大量系统资源。
System.out.println("heading" + s + "trailer" + t);上述语句要求新建一个StringBuffer(字串缓冲),追加自变量,然后用toString()将结果转换回一个字 串。特别是能在一个循环里重复利用它的时候。通过在每次循环里禁止新建一个字串缓冲,可节
省980 单位的对象创建时间(如前所述)
2、同步:
在JDK 解释器中,调用同步方法通常会比调用不同步方法慢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 字节码。
运算 示例 标准时间
本地赋值 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、字串的开销
字串连接运算符+看似简单,但实际需要消耗大量系统资源。
System.out.println("heading" + s + "trailer" + t);上述语句要求新建一个StringBuffer(字串缓冲),追加自变量,然后用toString()将结果转换回一个字 串。特别是能在一个循环里重复利用它的时候。通过在每次循环里禁止新建一个字串缓冲,可节
省980 单位的对象创建时间(如前所述)
2、同步:
在JDK 解释器中,调用同步方法通常会比调用不同步方法慢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 字节码。
相关文章推荐
- java程序性能优化---2--2.2常用优化组件和方法
- Java性能优化的策略和常见方法(二)
- java性能优化开发之--适当的方法体长度
- Java中性能优化的35种方法汇总
- 10种简单的Java性能优化方法
- Java性能优化的策略和常见方法
- Java代码性能优化的35个方法总结
- Java性能优化的策略和常见方法(一)
- Java性能优化的策略和常见方法(一)
- Java性能优化方法
- java程序性能优化之设计优化--优化组件和方法(2)
- Java中性能优化的35种方法汇总
- Java性能优化指南系列(一):概述和性能测试方法
- Java性能优化指南系列(一):概述和性能测试方法
- 有关Java性能优化方面的策略和常见方法
- 常用优化组件和方法- Java程序性能优化--让你的Java程序更快、更稳定
- Java性能优化的策略和常见方法
- Java性能优化指南系列(一):概述和性能测试方法
- Java性能优化的策略和常见方法
- [转载] Java 性能优化技巧集锦 (6)