effictive--避免创建不必要的对象

本文通过两个实例演示了如何在Java程序中避免不必要的对象创建以提高性能。第一个例子展示了如何使用静态日期对象判断婴儿潮时期出生的人;第二个例子对比了使用装箱后的长整型变量与直接使用长整型变量进行累加操作的性能差异。

demo01:

package com.xiaohao.effective;

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

/**
 * 避免创建不必要的对象Calendar,BOOM_START,BOOM_END
 * @author Administrator
 *
 */
public class Demo01 {
	private static final Date BOOM_START;
	private static final Date BOOM_END;
	
	static {
		Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
		gmtCal.set(1946,Calendar.JANUARY,1,0,0,0);
		BOOM_START = gmtCal.getTime();
		gmtCal.set(1965,Calendar.JANUARY,1,0,0,0);
		BOOM_END = gmtCal.getTime();
	}
	
	public static boolean isBabyBoomer(Date birthDate) {
		return birthDate.compareTo(BOOM_START) >= 0 &&
				birthDate.compareTo(BOOM_END) < 0;
	}
}


demo02:

package com.xiaohao.effective;

import java.util.Date;
/**
 * countNum01方法中每执行一次sum +=1,实际上是sum = sum + 1,但是sum是对象,对象不支持“+”运算,所以sum
 * 会进行自动拆箱和装箱,sum = sum.intValue() + 1; Long sum = new Long(sum);
 * 就会创建一个Long类型对象,非常耗性能 , 而countNum02并不会如此。
 * 注意:要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱
 * @author Administrator
 *
 */
public class Demo02 {
	private static Demo02 d= new Demo02();
	
	public static void countNum01(){
		Long sum = 0L;
		long t1 = new Date().getTime();
		for(long i=0;i<Integer.MAX_VALUE;i++) {
			sum += i;
		}
		long t2 = new Date().getTime();
		System.out.println(sum + " :case " + (t2-t1));
	}
	
	public static void countNum02(){
		long sum = 0L;
		long t1 = new Date().getTime();
		for(long i=0;i<Integer.MAX_VALUE;i++) {
			sum += i;
		}
		long t2 = new Date().getTime();
		System.out.println(sum + " :case " + (t2-t1));
	}
	
	public static Demo02 getInstance() {
		if(d == null) {
			d = new Demo02();
		}
		return d;
	}
}

测试demo02:

package com.xiaohao.test;

import org.junit.Test;

import com.xiaohao.effective.Demo02;

public class TestEffective {
	
	@Test
	public void testDemo02() {
		Demo02.getInstance().countNum01();
		
		Demo02.getInstance().countNum02();
	}
}

output:

2305843005992468481 :case 7277
2305843005992468481 :case 655

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值