effective java
footprint内存占用
1. 需要用函数获得常量时,尽量将代码块放进static{}模块
2. 建立数据库连接池的代价非常昂贵,如果能重用则最好。
3. 一个典型的容易内存泄露的例子
pubic class Stack {
private Object[] elements;
private int size = 0;
...............
public viod push(Object e) {
elements[size++] = e;
}
public Object pop(){
return elements[--size];
}
}
当栈里面增长,然后缩小时就会出现过期的引用对象(无意识的对象保持)
这些对象一直都不会被释放,知道elements[i]被重新赋值
比较推荐的写法则是如下:
public Object pop(){
Object result = elements[--size];
//清除不再引用的对象
elements[--size] = null;
return result;
}
4. 具有共有的静态final数组域几乎总是错误的
如 public static final Type[] values = {....}
比较好的办法是定义为private变量
5. 优先考虑静态成员类(匿名类除外)
6.如果需要时使用保护性拷贝
pubic Period(Date date) {
this.date = date
}
如果需要,可以这样拷贝
pubic Period(Date date) {
this.date = new Date(data.getTime());
}
7 尽量避免使用相同参数的重载
如 public String test(Set s) {}
public String test(List l) {}
public String test(Collection c) {}
8 尽可能的缩小局域变量的范围。
9 如果没有很好的优化方案,那就不要去优化,否则可能引起不可预料问题。
47/P161

浙公网安备 33010602011771号