- 重用对象而不是每次都创建一个相同功能的对象
极端的反面例子,每次执行都会创建一个新的String实例:
String s = new String("stringette"); // DON'T DO THIS!
建议:
String s = "stringette";
- 不可变类通常可以使用静态工厂方法来避免创建不必要的对象
遗留任务:
- Boolean.valueOf(String)总是优先于构造器Boolean(String),确认valueOf的实现;
- Boolean b = true,确认语句的实现,是否会创建对象。
- 重用那些已知不会被修改的可变对象
public class Person { private final Date birthDate; // Other fields, methods, and constructor omitted // DON'T DO THIS! public boolean isBabaBoomer() { // 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; } }建议:
public class Person { private final Date birthDate; // Other fields, methods, and constructor omitted /** * 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 isBabaBoomer() { return birthDate.compareTo(BOOM_START) >= 0 && birthDate.compareTo(BOOM_END) < 0; } }
- 针对某个特定对象的特定适配器情形,不需要创建多个适配器实例(见EJ p19例,Map接口的keySet方法)
- 注意自动装箱,优先使用基本类型,当心无意识的自动装箱
// 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); }
遗留任务:学习自动装箱。
- 小对象的创建和回收动作是非常廉价的
- 非常重量级的对象可以使用对象池(object pool),如数据库连接
学习EJ.39时,注意“保护性拷贝(defensive copying)”的内容,并总结两者的区别。
相关推荐
Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001
Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005
Eijiro V86 JE~EJ.zip.002Eijiro V86 JE~EJ.zip.002Eijiro V86 JE~EJ.zip.002
Eijiro V86 JE~EJ.zip.004Eijiro V86 JE~EJ.zip.004
TheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zip
Eijiro V86 JE~EJ.zipEijiro V86 JE~EJ.zip
Eijiro V86 JE~EJ.zip.006Eijiro V86 JE~EJ.zip.006Eijiro V86 JE~EJ.zip.006
Aspnet-ej2-aspmvc-ej1compatibility.zip,此演示旨在避免在asp.net mvcsyncfusion essential js 1和essential js 2 asp.net mvc兼容性中出现essential js 1和essential js 2兼容性问题。,asp.net是一个开源的web框架...
本地会话实时分析模式 Profiler能够根据用户定义的启动方式进行设置。用户即刻便能从设置好的JVM中看到实时数据。用户还可以无需自定义,直接从多...用户可使用编程的命令行比较工具或ant task比较工具创建对比报告。
能在DOS下打开和关闭光驱的C程序
Digital Image Correlation (DIC) is an optical, non-contact method to measure full-field displacements and strains. The only requirement is that the test specimen has a random speckle pattern on its ...
欧姆龙模块型温控器EJ1pdf,欧姆龙模块型温控器EJ1:控制柜内安装型温控器,灵活的模块化设计,与上位机设备的整合性大大提高。小型模块结构使温度系统的构造最适合于应用。无须编程就可与可编程控制器进行连接,减少...
在DOS下弹出CD-ROM的小程序,需要先加载MSCDEX.
EJ 380-1989 EJ 380-1989 EJ 380-1989
EJ511_Datasheet_rev0.97.pdf
ABB数字量IO扩展模块,国产EJ1820支持DeivecNet通讯,完美兼容,对ABB数字IO信号进行扩展说明书
基于51单片机的自动浇灌系统,资源包括原理图,代码,仿真图,相关资料等。功能实现:采集土壤温湿度信息,达到阈值控制浇水或停止浇水,包括温度报警等功能。
倍福EJ模块简介
欧姆龙 倾斜温度控制用模块式温控器EJ1G操作手册pdf,不要将终端单元直接连接到HFU。终端单元必须连接在基本单元的右侧。HFU 必须连接在基本单元的左侧。EJ1 无法与CJ 系列的PLC 链接使用。对于倾斜温度控制应使用EJ1...
ARM926EJ-S Technical Reference Manual Copyright © 2001-2008 ARM Limited. All rights reserved. Release Information The following changes have been made to this book.