【3】避免创建不必要的对象
一般的来说,最好能重用对象而不是在每次需要什么功能就创建一个完成该功能的新对象。重用方式快速,流行。如果对象是不可变的,它就始终可以被重用。
如极端的放例子:
String s = new String("huanglei"); //这个目前应该很多人不会这么用,这是一个不错的错误
String s = "huanglei"; //正确方式
只用一个String实例,而不是每次执行的时候都创建一个新的实例,而且它可以保证,对于所有在同一台虚拟机中运行的代码,只要它们包含相同的字符串字面常量,该对象就会被重用。
有一种创建多余对象的新方法——自动装箱,它允许程序员将基本类型和装箱基本类型混用。按需要自动装箱和拆箱。
public static void main(String[] args){
long sum = 0L;
for(long i = 0;i < Integer.XAX_VAKUE ; i++){
sum +=i;
}
System.out.println(sum);
}
因为是计算正值的和,所以程序用long算法,因为int不够大,无法容纳所有int正值的总和。这段程序是没有错的,但是要注意什么的sum要和i类型一样,Long和long转换速度有很大的区别
要有限使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
当然我们不能盲目的认为,创建对象的代价非常昂贵,我们应该尽量少创建对象。 这其实是错误的。因视具体情况而定,创建对象其实代价比较廉价。
【4】消除过期对象的引用
注意内存泄漏,如果一个栈先增长,然后收缩,这样的话,从栈中弹出来的对象是不会作为垃圾回收,即使使用栈的程序不再引发这些对象,它们也不会被回收。
一般来说,只要类是自己管理内存,我们就应该警惕内存泄漏问题,只要元素被释放掉,这个元素中包含的任何对象引用都应该清空。