• (第五条)避免创建不必要的对象


    对比创建没必要的对象:

    public class Person {
    
        private Date birthDate = new Date();
    
        public boolean isBabyBoomer(){
            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
            cal.set(1946,Calendar.JANUARY,1,0,0,0);
            Date boomStart =cal.getTime();
            cal.set(1965,Calendar.JANUARY,1,0,0,0);
            Date boomEnd =cal.getTime();
            return birthDate.compareTo(boomStart) >=0 && birthDate.compareTo(boomEnd) < 0;
        }
    }

    上述方法循环执行1000W次消耗3.8秒左右,上述方法我们每次都需要新建一个Calendar、一个TimeZone、2个Date。下边我们使用static初始化尝试一下:

    public class Person {
    
        private Date birthDate = new Date();
        private static final Date BOOM_START;
        private static final Date BOOM_END;
        static {
            Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
            cal.set(1946,Calendar.JANUARY,1,0,0,0);
            BOOM_START =cal.getTime();
            cal.set(1965,Calendar.JANUARY,1,0,0,0);
            BOOM_END =cal.getTime();
        }
    
        public boolean isBabyBoomer(){
            return birthDate.compareTo(BOOM_START) >=0 && birthDate.compareTo(BOOM_END) < 0;
        }
    }

    使用static代码块之后循环1000W次只需要0.018秒左右

      总结如下:

          1.对于多次重用的对象并且初始化之后不会再改变可以考虑在静态区域生成。

          2.当你应该重用现有对象的时候,请不要创建新的对象。

  • 相关阅读:
    危险系数
    快速幂模板
    回文数字
    Echart图表使用
    http请求头中Referer的含义和作用
    有关程序员的时间管理
    数据库报错 java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
    sql中字符串替换
    前端获取数据库的datetime(时间戳) 转化成日期展示出来
    MySQL版本升级
  • 原文地址:https://www.cnblogs.com/lkf-00889/p/7346694.html
Copyright © 2020-2023  润新知