Java之创建对象>5.Avoid creating unnecessary objects详解编程语言
2023-06-13 09:20:46 时间
根据生日来判断是否是婴儿潮时期出生的,isBabyBoomer()是一个糟糕的设计,每次调用这个方法都会创建Calendar,TimeZone以及2个Date对象实例,当此方法被频繁调用时将会非常地影响性能。
public class Person { private final Date birthDate; // DONT 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); }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15969.html
cjava相关文章
- Java方法重载_java入门方法的使用
- Java 20 发布,新特性一览:Amber、Loom 和 Panama 项目
- 服务端 I/O 性能大比拼:Node、PHP、Java 和 Go详解编程语言
- 你需要理解的 Java 反射机制知识总结详解编程语言
- java编写五子棋详解编程语言
- java 检测文本、文件编码详解编程语言
- Java通过gzip对字符串进行压缩和解压缩详解编程语言
- java使用ffmpeg生成视频缩略图详解编程语言
- Java开发之文件下载详解编程语言
- Java基础——深入理解Java中的final关键字详解编程语言
- Java数据结构和算法(十五)——无权无向图详解编程语言
- Java和WebSocket开发网页聊天室详解编程语言
- Java程序员必备知识,《JAVA编程思想》包和访问权限详解编程语言
- java enum(枚举)的使用详解编程语言
- Java中内存中的Heap、Stack与程序运行的关系详解编程语言
- 新手进阶:从Java开发到Linux系统架构(java转linux)
- Java 创建文本内容详解编程语言
- Java对象的序列化(Serialization)和反序列化详解编程语言
- java 枚举的真面目详解编程语言
- Java:延迟功能的Robot在Lunix系统上会报错详解编程语言
- Linux与Java结合:开启全新的编程之旅(linux java())