Java 程序优化:字符串操作、基本运算方法等优化策略(二)
2015-09-04 22:31
501 查看
五、数据定义、运算逻辑优化
多使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈 (Stack) 里面,读写速度较快。
其他变量,如静态变量、等,都在堆实例变量 (heap) 中创建,读写速度较慢。
清单 12 所示代码演示了使用局部变量和静态变量的操作时间对比。
位运算代替乘除法
位运算(>> <<)是所有的运算中最为高效的。
一维数组代替二维数组
JDK 很多类库是采用数组方式实现的数据存储,比如 ArrayList、Vector 等,数组的优点是随机访问性能非常好。一维数组和二维数组的访问速度不一样,一维数组的访问速度要优于二维数组。在性能敏感的系统中要使用二维数组,尽量将二维数组转化为一维数组再进行处理,以提高系统的响应速度。
减少循环次数
使用布尔逻辑运算符代替位运算符
if条件判断,使用&& 代替&(位运算) 使用|| 代替|(位运算)
&& || 经过编译器优化,短路
使用 arrayCopy()
数据复制是一项使用频率很高的功能,JDK 中提供了一个高效的 API 来实现它。
System.arraycopy() 函数是 native 函数,通常 native 函数的性能要优于普通的函数,所以,仅处于性能考虑,在软件开发中,应尽可能调用 native 函数
ArrayList 和 Vector 大量使用了 System.arraycopy 来操作数据,特别是同一数组内元素的移动及不同数组之间元素的复制。
多使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈 (Stack) 里面,读写速度较快。
其他变量,如静态变量、等,都在堆实例变量 (heap) 中创建,读写速度较慢。
清单 12 所示代码演示了使用局部变量和静态变量的操作时间对比。
位运算代替乘除法
位运算(>> <<)是所有的运算中最为高效的。
一维数组代替二维数组
JDK 很多类库是采用数组方式实现的数据存储,比如 ArrayList、Vector 等,数组的优点是随机访问性能非常好。一维数组和二维数组的访问速度不一样,一维数组的访问速度要优于二维数组。在性能敏感的系统中要使用二维数组,尽量将二维数组转化为一维数组再进行处理,以提高系统的响应速度。
减少循环次数
使用布尔逻辑运算符代替位运算符
if条件判断,使用&& 代替&(位运算) 使用|| 代替|(位运算)
&& || 经过编译器优化,短路
使用 arrayCopy()
数据复制是一项使用频率很高的功能,JDK 中提供了一个高效的 API 来实现它。
System.arraycopy() 函数是 native 函数,通常 native 函数的性能要优于普通的函数,所以,仅处于性能考虑,在软件开发中,应尽可能调用 native 函数
ArrayList 和 Vector 大量使用了 System.arraycopy 来操作数据,特别是同一数组内元素的移动及不同数组之间元素的复制。
相关文章推荐
- java.util之Iterable与Iterator
- [转载]Eclipse自定义快捷键导出和导入方法
- maven项目编译漏掉src/main/java下的xml配置文件
- Java 字符串倒序
- 搭建Spring + SpringMVC + Mybatis框架之三(整合Spring、Mybatis和Spring MVC)
- JAVA 基础笔记之四 final参数可以修改吗?
- [leetcode-126]Word Ladder II(java)
- 算法学习-----插入排序(Java)
- java BigDecimal
- Java Atomic
- java.util.concurrent.atomic原子操作类包
- Java_jdbc 基础笔记之四 数据库连接 (通用更新方法)
- Java中的Atomic包使用指南
- 策略模式
- "javac不是内部或外部命令"的解决办法
- JavaWeb学习总结(二) Servlet
- Java——面向对象概述
- Java_jdbc 基础笔记之三 数据库连接 (Statement)
- 搭建web项目结合spring+cxf的webservice服务
- 实现一颗二叉树,检查二叉树是否平衡(java实现)