美文网首页
5.避免创建不必要的对象

5.避免创建不必要的对象

作者: 哲学与豆包 | 来源:发表于2018-02-02 17:04 被阅读0次

一般来说,如果能重用对象,尽量重用对象,而不是创建一个相同的对象.如果对象是不可变的,它始终就应该被重用.

作者举了非常多的反面例子

String对象的创建

String s = new String("string"); // 不要这么做
String s = "string" // 应该这么做

第一种方法会创建两个对象
而第二种只会创建一个对象,并且字符类型会保存在常量池里面,同样的String类型时会重用的

在静态工厂方法(第一条)中,使用缓存对象也是为了避买创建不必要的对象

常用方法调用的时候也会容易产生不必要的对象

下面的例子我做了一些简化,阅读更方便

// 反面例子,不要这么做 每次调用都要创建Calendar对象和Date对象
public class Person {
  private final Date birthDate;
  public boolean isBabyBoomer() {
      Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
      Date date =  calendar.getTime();
      // 业务逻辑xxxxx
  }
}

可以按照下面的方法来优化

public class Person {
   private final Date birthDate;
   private final Date date;
   static {
        Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        date =  calendar.getTime();
   }
   public boolean isBabyBoomer() {
       // 在这里再使用date
   }
}

你甚至还可以延迟初始化 date这个变量, 让第一次执行过才初始化它.

自动装箱

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

由于自动装箱的特性, 使得每次循环都要执行一段 new Long(i,10);
本次循环中一共创建了2147483647个对象,这效率你懂的.

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

最后一些话

不要错误的认为"创建对象的代价非常昂贵,我们应该要尽可能地避免创建对象".
相反,小对象的构造器只是做很少的工作,所以小对象的创建和回收是非常廉价的.

还有一点是通过维护对象池来避免创建对象并不是就是一种好的做法,除非是非常重量级的对象.
一般而言,维护自己的对象池必定会把代码弄得很乱,还会增加使用内存,损害性能.现代的JVM实现具有高度优化的垃圾回收器,其性能很容易就超过轻量级的对象池的性能.

相关文章

  • 5.避免创建不必要的对象

    一般来说,如果能重用对象,尽量重用对象,而不是创建一个相同的对象.如果对象是不可变的,它始终就应该被重用. 作者举...

  • 5.避免创建不必要的对象

    最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象。 如果对象是不可变(immutable),它就始终...

  • 条目6:避免创建不必要的对象

    避免创建不必要的对象 避免通过构造函数创建字符串 避免使用String.match方法做正则匹配 避免在循环中频繁...

  • 避免创建不必要的对象

    在编码中尽量减少大对象的使用,创建对象的成本是非常高的。举个栗子: 代码块一 代码块二 在代码块一中我们使用的是l...

  • 避免创建不必要的对象

    第五条:避免创建不必要的对象 1. 简介 一般来说,我们最好的做法是重用对象,而不是每次使用都new出一个新的相同...

  • 避免创建不必要的对象

    一般来说,最好能重用对象而不是每次需要的时候就创建一个相同的对象。如果对象是不可变的,它就始终可以被重用。 例子:...

  • 避免创建不必要的对象

    记住一个原则:能重用对象就不要每次都创建一个新的对象。例一: 字符串常量在JVM常量池中储存。 例二:对于同时提供...

  • 避免创建不必要的对象

    一、错误做法 二、正确做法

  • Android 如何提高代码质量?

    避免创建不必要的对象,尽可能避免频繁的创建临时对象,例如在for循环内,减少GC的次数。 尽量使用基本数据类型代替...

  • GeekBand C++设计模式

    5.对象创建 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持...

网友评论

      本文标题:5.避免创建不必要的对象

      本文链接:https://www.haomeiwen.com/subject/rizszxtx.html