一个静态初始化器的应用--避免创造不必要的对象
来源:互联网 发布:vim设置python语法高亮 编辑:程序博客网 时间:2024/05/02 02:32
亲测
package com.zxm;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.TimeZone;/** * Creator:zxm * Date:2017/2/23 * Description: */public class Person { private final Date birthDate = new Date(1991,11,28,0,0,0); public boolean isBabyBoomer(){ Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); gmtCal.set(1946,Calendar.JANUARY,1,0,0,0); Date boomStart = gmtCal.getTime(); gmtCal.set(1965,Calendar.JANUARY,1,0,0,0); Date boomEnd = gmtCal.getTime(); return birthDate.compareTo(boomStart)>=0 && birthDate.compareTo(boomEnd)<0; } public static void main(String[] args) { Date start = new Date(); Person p = new Person(); for (int i = 0; i < 10000000; i++) { p.isBabyBoomer(); } Date end = new Date(); long sec = end.getTime() - start.getTime(); System.out.println(sec); }}需要5743ms
package com.zxm;import java.util.Calendar;import java.util.Date;import java.util.TimeZone;/** * Creator:zxm * Date:2017/2/23 * Description: */public class PersonAno { private final Date birthDate = new Date(1991,11,28,0,0,0); 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 boolean isBabyBoomer(){ return birthDate.compareTo(BOOM_START)>=0 && birthDate.compareTo(BOOM_END)<0; } public static void main(String[] args) { Date start = new Date(); PersonAno p = new PersonAno(); for (int i = 0; i < 10000000; i++) { p.isBabyBoomer(); } Date end = new Date(); long sec = end.getTime() - start.getTime(); System.out.println(sec); }}
只需要7ms !!!
Person类中,isBabyBoomer每次被调用的时候,都会新建一个Canlendar,一个TimeZone和两个Date实例,这是不必要的。
PersonAno用了一个静态的初始化器,避免了Person类中的效率低下的情况。
PersonAno类只在初始化的时候创建Calendar,TimeZone和Date实例一次,而不是在每次调用isBabyBoomer的时候都创建这些实例。
0 0
- 一个静态初始化器的应用--避免创造不必要的对象
- Effective java第五条:避免创造不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 第五 避免不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象
- 避免创建不必要的对象。
- 避免创建不必要的对象
- 05、避免创建不必要的对象
- 避免创建不必要的SPWeb对象
- EffectiveJava-避免创建不必要的对象
- 第五条:避免创建不必要的对象
- 5、避免创建不必要的对象
- EffactiveJava-避免创建不必要的对象
- 05-避免创建不必要的对象
- 高效Java05:避免创建不必要的对象
- 在salesforce中如何利用data loader导入数据和删除数据(mac)
- js限制输入框输入为数字,replace()方法
- 在java项目中的mongodb的_id被fastjson转为json时竟然丢失了
- WebGL Lighting
- 算法训练 Car的旅行路线 蓝桥杯
- 一个静态初始化器的应用--避免创造不必要的对象
- 不需要在清单文件中声明任何权限的Toast
- Delphi操作excel说明
- 蓝桥杯 ALGO-13 算法训练 拦截导弹 Java版
- Service
- Lcx的多种用法:3个功能+9个参数,你会怎么玩?
- 怎么认识json对象和json字符串,以及相互转换
- 任务调度系统-任务依赖的设计
- AI学习之路(6): NumPy的使用