String s = new String("stringette"); // DON'T DO THIS!

The improved version is simply the following:

String s = "stringette";

根据生日来判断是否是婴儿潮时期出生的,isBabyBoomer()是一个糟糕的设计,每次调用这个方法都会创建Calendar,TimeZone以及2个Date对象实例,当此方法被频繁调用时将会非常地影响性能。

public class Person {
private final Date birthDate; // DON'T DO THIS!
public boolean isBabyBoomer() {
// Unnecessary allocation of expensive object
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;
}
}

这个是优化后的方法,The improved version of the Person class creates Calendar, TimeZone, and Date instances only once

这些对象都是初始化后不会再被修改

class Person {
private final Date birthDate;
/**
* The starting and ending dates of the baby boom.
*/
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;
}
}

autoboxing(自动装箱)也会带来非常大的性能影响

 // Hideously slow program! Can you spot the object creation?
public static void main(String[] args) {
Long sum = 0L;
for (long i = 0; i < Integer.MAX_VALUE; i++) {
sum += i;
}
System.out.println(sum);
}

最新文章

  1. Python之路【第六篇】python基础 之面向对象进阶
  2. Spring注入JPA+JPA事务管理
  3. url传参中文乱码
  4. JMeter基础之一 一个简单的性能测试
  5. linux中创建gpio节点
  6. Win10 创建应用程序包及部署
  7. web项目的日志打印位置设置
  8. How to Use JUnit With JMeter
  9. ASP.NET MVC +EasyUI 权限设计(四)角色动作
  10. JSON数据理解
  11. How to change a product dropdown attribute to a multiselect in Magento
  12. 详解 anjularjs的ui-route(多视图、视图嵌套、视图传参)
  13. Android开发中用到的第三方框架汇总
  14. 【Git】Git工具常用命令
  15. JSON库的使用研究(三)
  16. base64URL处理
  17. Js 不支持函数的重载
  18. dev-server.js浅析
  19. 每日英语:Apple Unveils New iPads
  20. poi读取Excel文件和图片

热门文章

  1. 《“胡”说IC——菜鸟工程师完美进阶》
  2. jQuery的attr方法处理checkbox的问题
  3. 关于Java中的equals方法
  4. 浅谈Java Future接口
  5. CentOS 7 在vmware中的网络设置
  6. 代理服务器polipo;socks5代理转http代理
  7. TortoiseSVN 和 VisualSVN
  8. Spring(AbstractRoutingDataSource)实现动态数据源切换
  9. Spring Boot集成JasperReports生成PDF文档
  10. JS获取当前项目名