Java基础温习有感(一) 不要创建不必要的对象

   其实我们有点java基础的同学都应该清楚能少创建对象就少创建对象,甚至在Effective Java中的多次强调让我们能不创建对象就不创建对象,可是我们在实际代码中真正做到这一点的有几个呢?
   首先我们先来看下面一段代码吧:

 

      public static void main(String[] args) {
		long startTime = System.currentTimeMillis();
		Long sum = 0L;
		for(long i = 0 ; i < Integer.MAX_VALUE ; i++) {
			
			sum += i;
		}
		System.out.println(System.currentTimeMillis() - startTime);
		
	}
    

  这段代码在我机器里打出了:44797,也就是说40几秒

 

   可是如果我们修改一下:

 

   把Long sum = 0L;改成     long sum = 0;

 

  在我机器里打出了:9016,也就是说10秒都不到

  可见创建对象与不创建对象的效率差距是多大了,其实这还好了,要是多次创建如数据库的Connection等一些更耗时的对象,那么更糟糕了。

 

  好了,我们有什么方法可以避免创建不必要的对象呢?

  第一,用静态工厂方法代替构造器

         好处:1,实例出的对象有名称;

                2,不必每次调用的时候都创建一个新的对象

                3,可以返回原返回类型的任何子类型的对象

                4,在创建参数化类型实例的时候,它们使代码变得更加简洁

  第二, 优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱

         好处:速度快,上面的例子正好说明了这一点

  第三,有效地重复利用一个已经初始化的对象

 

 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();

     两次需要用来时间,但是只初始化了一个Calendar对象,可见是相当省时.

 

     总结:本节提出的是不要创建不必要的对象,并不是指创建对象的代价非常昂贵,我们应该要尽可能地避免创建对象。相反,由于小对象的构造哭只做很少量的工作,所以,小对象的创建和回收动作是非常廉价的,特别是在现代的JVM实现上更是如此。通过创建附加的对象,提升程序的清晰性、简洁性和功能性,这通常是件好事。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值