java代码优化执行效率 java程序优化方法( 五 )


String s = "Hello";
int i = v.indexOf(s);
if(I != -1) v.remove(i);
这个版本中我们直接在remove()方法中给出待删除元素的精确索引位置,从而避免了第二次搜索 。一个更好的版本是:
String s = "Hello"; v.remove(s);
最后,我们再来看一个有关Vector类的代码片段:
for(int I=0; I++;Iv.length)
如果v包含100,000个元素,这个代码片段将调用v.size()方法100,000次 。虽然size方法是一个简单的方法,但它仍旧需要一次方法调用的开销 , 至少JVM需要为它配置以及清除堆栈环境 。在这里,for循环内部的代码不会以任何方式修改Vector类型对象v的大?。虼松厦娴拇胱詈酶男闯上旅嬲庵中问剑?
int size = v.size(); for(int I=0; I++;Isize)
虽然这是一个简单的改动 , 但它仍旧赢得了性能 。毕竟,每一个CPU周期都是宝贵的 。
15、当复制大量数据时,使用System.arraycopy()命令 。
16、代码重构:增强代码的可读性 。
例如:
public class ShopCart {
private List carts ;

public void add (Object item) {
if(carts == null) {
carts = new ArrayList();
}
crts.add(item);
}
public void remove(Object item) {
if(carts. contains(item)) {
carts.remove(item);
}
}
public List getCarts() {
//返回只读列表
return Collections.unmodifiableList(carts);
}
//不推荐这种方式
//this.getCarts().add(item);
}
17、不用new关键词创建类的实例
用new关键词创建类的实例时 , 构造函数链中的所有构造函数都会被自动调用 。但如果一个对象实现了Cloneable接口,我们可以调用它的clone()方法 。clone()方法不会调用任何类构造函数 。
在使用设计模式(Design Pattern)的场合,如果用Factory模式创建对象,则改用clone()方法创建新的对象实例非常简单 。例如,下面是Factory模式的一个典型实现:
public static Credit getNewCredit() {
return new Credit();
}
改进后的代码使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路对于数组处理同样很有用 。
18、乘法和除法
考虑下面的代码:
for (val = 0; val100000; val +=5) {
alterX = val * 8; myResult = val * 2;
}
用移位操作替代乘法操作可以极大地提高性能 。下面是修改后的代码:
for (val = 0; val100000; val += 5) {
alterX = val3; myResult = val1;
}
修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2 。相应地,右移1位操作相当于除以2 。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解 , 所以最好加上一些注释 。
19、在JSP页面中关闭无用的会话 。
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 %@pagesession="false"% 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession
session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历 。由于session会消耗内存资源 , 因此 , 如果不打算使用session,应该在所有的JSP中关闭它 。
对于那些无需跟踪会话状态的页面,关闭自动创建的会话可以节省一些资源 。使用如下page指令:%@ page session="false"%
20、JDBC与I/O
如果应用程序需要访问一个规模很大的数据集,则应当考虑使用块提取方式 。默认情况下,JDBC每次提取32行数据 。举例来说,假设我们要遍历一个5000行的记录集,JDBC必须调用数据库157次才能提取到全部数据 。如果把块大小改成512,则调用数据库的次数将减少到10次 。

推荐阅读