第五条-消除过期的对象引用

原创 2012年03月30日 16:59:46

 

package EffectiveJava;

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

public class _2_4 {
	private final Date birthday;
	private static final Date start;
	private static final Date end;
	private  transient Date s = null;
	private transient  Date e = null;
	public _2_4(Date birthday) {
		this.birthday = birthday;
	}
	static {  // 将这个方法写在静态区域块中,这样只需生成一个对象实例,大大提高了效率,但附加的对象貌似太臃肿,如果方法一次都不调用的话,这里初始值就是浪费了
		Calendar cale = Calendar.getInstance();
		cale.set(1946, Calendar.JANUARY, 1, 0, 0);
		start = cale.getTime();
		cale.set(1965,Calendar.JANUARY,1,0,0);
		end = cale.getTime();
	}
	public boolean isBaby() { // 些方法每次被调用的时候都会生成一个Calendar 对象,而执行完方法后又迅速被垃圾收集机制回收,所以效率很慢
		Calendar cale = Calendar.getInstance(); 
		cale.set(1946, Calendar.JANUARY, 1, 0, 0);
		Date start = cale.getTime();
		cale.set(1965,Calendar.JANUARY,1,0,0);
		Date end = cale.getTime();
		return birthday.compareTo(start)>0&&birthday.compareTo(end)<0;
	}
	public boolean bisBaby() { // 这是第三个方法,仿照的 hashmap 中的 keyset,定义两个临时变量 ,如果变量为空,则初始化,如果不为空,则不要初始化
		return this.birthday.compareTo(start)>0&&birthday.compareTo(end)<0;
	}
	public boolean cisBaby() {
		if(s==null || e ==null)
		{
			Calendar cale = Calendar.getInstance();
			cale.set(1946, Calendar.JANUARY, 1, 0, 0);
			this.s = cale.getTime();
			cale.set(1965,Calendar.JANUARY,1,0,0);
			this.e = cale.getTime();
		}
		return s.compareTo(birthday)>0&&e.compareTo(birthday)<0;
	}
	public static void main(String args[]) {
		
		_2_4 person = new _2_4(Calendar.getInstance().getTime());
		long begin = System.currentTimeMillis();
		for(int i=0;i<1000000;i++) {
			person.bisBaby();
		//	person.isBaby();
			person.cisBaby();
		}
		long end = System.currentTimeMillis();
		System.out.println(((double)end-begin)/1000+" s");//3.359 s  0.016 s
			
	}
	
}

相关文章推荐

第五条:避免创建不必要的对象

一般来说,尽可能的重用对象,如果对象是不可变的(immutable),它就始终可以被重用。 String s = new String("stringette"); //DON'T DO THI...

手动内存管理-对象的引用计数

// //  main.m //  OC手动内存管理-对象的引用计数 // //  Created by Goddog on 15/1/13. //  Copyright...

live555学习笔记16-几个重要对象的生命期

十六 几个重要对象的生命期 live555中很多类,类与类之间的关系复杂,从属关系不明显,层次上看起来也有些乱.所以源代码读起来比较困难,对于一些对象生命的来龙去脉也很难厘清. 但这并不能...

PHP 安全手册 第五条 输出转义 最好的MYSQL 转义函数 mysql_real_escape_string

过滤的延深 就是转义,有些数据是无法进行过滤,但还必须存在的时候,就要进行转义 尤其在数据库中查找,或是写入的时候,很重要  作为一项应用的开发者,你必须知道每一个向外部系统输...

Java对象和JSON互转换利器-Gson

  • 2011年03月09日 18:24
  • 427KB
  • 下载

第6条:消除过期的对象引用

第6条:消除过期的对象引用    当我们从运用手工管理内存的语言时(例如C或者C++)转换到具有垃圾回收功能语言的时候,程序员的工作会变得更高价容易,因为当用完一个对象之后,它们在之后的时间会被自动回...

面向对象软件构造(第二版)1-6章

  • 2008年04月13日 04:05
  • 1.4MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第五条-消除过期的对象引用
举报原因:
原因补充:

(最多只允许输入30个字)