博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(第五条)避免创建不必要的对象
阅读量:6885 次
发布时间:2019-06-27

本文共 1215 字,大约阅读时间需要 4 分钟。

对比创建没必要的对象:

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.当你应该重用现有对象的时候,请不要创建新的对象。

转载于:https://www.cnblogs.com/lkf-00889/p/7346694.html

你可能感兴趣的文章
Ceph常用命令
查看>>
Spring MVC3 一对多的复杂表单和一次保存方法
查看>>
R.java檔重建
查看>>
Java注解Annotation详解
查看>>
ejb事务
查看>>
node环境搭建
查看>>
Speed ScrollView
查看>>
BJImageCropper
查看>>
android handler总结
查看>>
2. ASIHttpRequest-发送数据
查看>>
[应用模板]移动应用界面
查看>>
嵌入式Linux C编程 02
查看>>
sql server支持连接管理功能
查看>>
java的强制类型转换想到的
查看>>
简要介绍cookie与session的区别与联系
查看>>
mysql flush用法
查看>>
response.setHeader()的用法
查看>>
一位前辈的经验,给正在思考的自己
查看>>
分享一篇关于lucene原理的文章
查看>>
基于 HTML5 结合互联网+ 的 3D 隧道
查看>>