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

posted @ 2016-02-21 22:16  牧 天  阅读(131)  评论(0)    收藏  举报