java 程序优化
来源:互联网 发布:usb端口电源限制怎么办 编辑:程序博客网 时间:2024/06/06 16:54
1. 尽量使用局部变量,应为局部变量是存放在栈内的,而JVM 正是基于栈的。所以访问
栈内的数据非常快。而全局变量是存放在常量池中的。访问起来要慢2到3倍。
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量,实例变量等,都在堆(Heap)中创建,速度较慢。
Java 代码:
Public class test(){
Int a = 0 ;
Public void add(){
Int I =a;
For(int j = 0 ;j<5;j++){
V = v+j;
}
a=v;
}
}
2. 在循环中循环的要尽量减少计算,因为反复的循环再加上反复的计算会使程序的效率降低。
Java 代码:
Int size = list.size();
For(int i=0;i<size;i++){
// do something
}
注意这里的size 来取代list.size();
3. 利用位移来替代乘除。可使运行的速度大大加快。
实例: a*8 换成 a<<3
位移一位代表乘以2,左移三位代表乘以8,相反右移以为代表除以2.
4.
Try –catch 优化
以下代码更容易被编译器优化
try {
some.method1();
some.method2();
some.method3();
} catch( method1Exception e ) {
// Handle exception 1
} catch( method2Exception e ) {
// Handle exception 2
} catch( method3Exception e ) {
// Handle exception 3
}
5.尽量使用final修饰符。在java 核心API 中有许多应用 final的例子,例如 java.lang.String 为String类指定final防止使用者覆盖length()方法。另外如果一个类是final的,则该类的所有方法都是final的,java 编译器会寻找机会防止内联(inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%.
6. 尽量重用对象
特别是String 对象的使用中,出现字符串连接情况的使用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理。因此生成过多的对象将会给程序带来很大的影响。
7.在java + Oracle的应用系统开发中,java中内嵌的sql语言应尽量使用大写的形式,以减少Oracle 解析器的解析负担。
8. java 编程过程中,进行数据库连接,I/O流操作,在使用完毕后,及时关闭以释放资源。应为对这些大对象的操作会造成系统的大开销。
9.过分的创建对象会消耗系统的大量内存,严重时,会导致内存泄漏,因此,保证过期的对象的及时的回收具有重要的意义。
JVM的GC并非十分的只能,因此建议使用对象完毕后,手动设置成null.
10.在使用同步机制时,应尽量使用方法同步代替代码块同步。
11. 不要在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层。
Error是获取系统错误的类,或者说是虚拟机错误的类。不是所有的错误Exception都能获取到的,虚拟机报错Exception就获取不到,必须用Error获取。
12. 当复制大量数据时,使用System.arraycopy();
13. 不要将数组声明为:public static final。
14. HaspMap的遍历。
Map<String, String[]> paraMap = new HashMap<String, String[]>();
for( Entry<String, String[]> entry : paraMap.entrySet() )
{
String appFieldDefId = entry.getKey();
String[] values = entry.getValue();
}
利用散列值取出相应的Entry做比较得到结果,取得entry的值之后直接取key和value。
15. StringBuffer,StringBuilder的区别在于:java.lang.StringBuffer线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用StringBuilder类,因为她支持所有相同的操作,但由于她不执行同步,所以速度更快。为了获得更好的性能,在构造StringBuffer或StringBuilder时应尽量指定她的容量。当然如果不超过16个字符时就不用了。
相同情况下,使用StringBuilder比使用StringBuffer仅能获得10%~15%的性能提升,但却要冒多线程不安全的风险。综合考虑还是建议使用StringBuffer。
16. 考虑使用静态方法,
如果你没有必要去访问对象的外部,那么就使你的方法成为静态方法。她会被更快地调用,因为她不需要一个虚拟函数导向表。这同事也是一个很好的实践,因为她告诉你如何区分方法的性质,调用这个方法不会改变对象的状态。
- Java性能优化:程序优化
- Java程序优化-设计优化
- JAVA程序编码优化
- Java程序性能优化 !
- Java程序性能优化
- Java程序性能优化 !
- java程序优化
- Java程序性能优化
- Java程序性能优化
- Java程序优化
- java程序性能优化
- Java程序性能优化
- Java程序性能优化
- Java程序性能优化
- java程序优化
- Java程序性能优化
- Java程序性能优化
- Java程序性能优化
- 基于SMTP的邮件发送客户端
- javascript&function 代码风格驻解
- iscroll4 精讲
- camel Intercept
- Asterisk配置文件说明
- java 程序优化
- maven setting.xml 详细解释----perfect
- 正则表达式常用表
- 程序员健康:编程之余保护眼睛
- spring发送邮件
- 用GDB调试程序
- mysql 配置优化
- cocosbuilder3中CCSprite的属性简介
- mount nfs server to board failed, pops up "mount: mounting ... failed: No such device"