Java 程序优化:字符串操作、基本运算方法等优化策略(二)
五、数据定义、运算逻辑优化
多使用局部变量
- 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈 (Stack) 里面,读写速度较快。
- 其他变量,如静态变量、等,都在堆实例变量 (heap) 中创建,读写速度较慢。
清单 12 所示代码演示了使用局部变量和静态变量的操作时间对比。
位运算代替乘除法
位运算(>> <<)是所有的运算中最为高效的。
一维数组代替二维数组
JDK 很多类库是采用数组方式实现的数据存储,比如 ArrayList、Vector 等,数组的优点是随机访问性能非常好。一维数组和二维数组的访问速度不一样,一维数组的访问速度要优于二维数组。在性能敏感的系统中要使用二维数组,尽量将二维数组转化为一维数组再进行处理,以提高系统的响应速度。
减少循环次数
使用布尔逻辑运算符代替位运算符
if条件判断,使用&& 代替&(位运算) 使用|| 代替|(位运算)
&& || 经过编译器优化,短路
使用 arrayCopy()
![]()
数据复制是一项使用频率很高的功能,JDK 中提供了一个高效的 API 来实现它。
System.arraycopy() 函数是 native 函数,通常 native 函数的性能要优于普通的函数,所以,仅处于性能考虑,在软件开发中,应尽可能调用 native 函数
ArrayList 和 Vector 大量使用了 System.arraycopy 来操作数据,特别是同一数组内元素的移动及不同数组之间元素的复制。