避免创建不必要的对象和避免使用终结方法

避免创建不必要的对象

1. String s = "123";

而不用String s = new String("123");

因为JVM中会有一个常量池,可以保存字符串常量,直接使用"123"可以直接从常量池中返回对象,而不会重新创建新对象


更加详细的说明:http://jiangzhengjun.iteye.com/blog/577039


2. 用valueOf()代替new Integer("1")

public static void main(String[] args) {
		Integer i1 = new Integer("1");
		Integer i2 = new Integer("1");
		Integer i3 = Integer.valueOf("1");
		Integer i4 = Integer.valueOf("1");
		System.out.println(i1 == i2);
		System.out.println(i3 == i4);
	}
会输出:

false
true

可以见用valueOf不会新建一个对象,实际上很多类默认的valueOf方法都不会返回一个新的实例

3. fianl 一个公用的变量

比如下面有一个比较一个日期集是否在2000年之前的方法:

public class Singleton implements Cloneable{
	public void printDateIsBefor2000(List days){
		Calendar c = Calendar.getInstance();
		c.set(2000, Calendar.JANUARY, 1);
		for (Calendar d : days) {
			System.out.println(c.after(d));
		}
	}
}
Calendar c = Calendar.getInstance();
将会被创建很多次, 他可以认为是一个常量,因此可以按照如下的方式来写:

public class Singleton implements Cloneable{
	private final static Calendar LIANGQIAN;
	
	static{
		LIANGQIAN = Calendar.getInstance();
		LIANGQIAN.set(2000, Calendar.JANUARY, 1);
	}
	
	public void printDateIsBefor2000(List days){
		for (Calendar d : days) {
			System.out.println(LIANGQIAN.after(d));
		}
	}
}
就能很大的提升效率

4. 使用视图类的方法

比如Map的keySet将会返回一个已经存在的keySet并不会返回拷贝,或者重新创建一个


5. 减少自动装填

Java的int等类型会进行自动装填,特别实在循环调用的时候,我们应该优先使用基本类型。


最后,并不是一定不要创建新的对象,JVM现代虚拟机对于小对象的回收非常快,如果频繁使用小对象可以大大增加程序的简洁性和可读性的话也是很应该使用的。


避免使用finallze方法

这个主要是因为效率的问题。

使用了finallze方法会增加垃圾回收的时间。

通常只有在用于调用native方法的析构函数的时候才会使用。

建议如果需要有资源释放等等after类的操作,可以采用提供终结方法然后try catch finally的方式。


你可能感兴趣的:(wzj)