软件许可使用权证书:Effective Java 笔记(二) - ilibaba的专栏 - CSDNBlog
来源:百度文库 编辑:九乡新闻网 时间:2024/07/14 08:53:11
NO.4 避免创建重复的对象
如果一个对象是非可变的,那么他中上可以被重用的,如:
如下Person类在每次调用isBabyBoomer()方法时都需新创建对象,极大的影响了性能
类初始化的顺序:先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数。
NO.5 消除过期的对象引用
垃圾回收器不会对“过期引用”(永远不会在被解除的引用)的对象进行回收。如:数组中的元素先增加再减少这种情况,下标大于size()的那一部分就是过期引用的对象。
解决方法:
2、程序能在第一时间抛出空指针异常;
NO.6 避免使用终结函数
终结函数(finalizer)可以用来回收不可到达的对象,就是说对象的生命周期结束后,可以用终结函数来回收为该对象分配的资源。但是,终结函数执行线程的优先级很低,以至于我们不敢把对时间要求比较高的对象回收让终结函数来回收。JVM总是会延迟终结函数的执行。对于急需回收对象,可以使用tyr finally,在finally写回收对象的代码,这样就保证对象能及时被回收。 终结函数其实也是有用的。第一种情况是当作安全网,当忘了对对象显示回收的时候,用终结函数作为最后的安全屏障。第二种情况是:普通对象通过一个本地方法委托给本地对象叫本地对等体。本地对等体不是普通对象,所以当委托给他的对象被回收的时候本地对等体并不会被回收,所以这时候终结函数就派上用场了。最后要注意的是,当子类改写覆盖了超类的终结函数时候,如果不显示调用超类的终结函数,那么超类的终结函数将不会被执行。 总结:尽量不使用终结函数,除非作为安全网或者是用来回收不关键的本地资源。
如果一个对象是非可变的,那么他中上可以被重用的,如:
- //不推荐,"test"本来就是一个String实例,如果此方法在一个循环中或者被频繁的调用,将会严重影响性能
- String s = new String("test");
- //推荐方式
- String s = "test";
如下Person类在每次调用isBabyBoomer()方法时都需新创建对象,极大的影响了性能
- import java.util.*;
- public class Person {
- private final Date birthDate;
- public Person(Date birthDate) {
- // Defensive copy - see Item 39
- this.birthDate = new Date(birthDate.getTime());
- }
- // Other fields, methods omitted
- // 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;
- }
- }
- import java.util.*;
- class Person {
- private final Date birthDate;
- public Person(Date birthDate) {
- // Defensive copy - see Item 39
- this.birthDate = new Date(birthDate.getTime());
- }
- // Other fields, methods
- /**
- * 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;
- }
- }
类初始化的顺序:先初始化父类的静态代码--->初始化子类的静态代码-->初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数。
NO.5 消除过期的对象引用
垃圾回收器不会对“过期引用”(永远不会在被解除的引用)的对象进行回收。如:数组中的元素先增加再减少这种情况,下标大于size()的那一部分就是过期引用的对象。
解决方法:
- public Object pop(){
- if(size == 0){
- throw new EmptyStackException();
- }
- Object result = elements[--size];
- //自减后把原来的引用置为null
- elements[size] = null;
- return result;
- }
2、程序能在第一时间抛出空指针异常;
NO.6 避免使用终结函数
终结函数(finalizer)可以用来回收不可到达的对象,就是说对象的生命周期结束后,可以用终结函数来回收为该对象分配的资源。但是,终结函数执行线程的优先级很低,以至于我们不敢把对时间要求比较高的对象回收让终结函数来回收。JVM总是会延迟终结函数的执行。对于急需回收对象,可以使用tyr finally,在finally写回收对象的代码,这样就保证对象能及时被回收。 终结函数其实也是有用的。第一种情况是当作安全网,当忘了对对象显示回收的时候,用终结函数作为最后的安全屏障。第二种情况是:普通对象通过一个本地方法委托给本地对象叫本地对等体。本地对等体不是普通对象,所以当委托给他的对象被回收的时候本地对等体并不会被回收,所以这时候终结函数就派上用场了。最后要注意的是,当子类改写覆盖了超类的终结函数时候,如果不显示调用超类的终结函数,那么超类的终结函数将不会被执行。 总结:尽量不使用终结函数,除非作为安全网或者是用来回收不关键的本地资源。
Effective Java 笔记(二) - ilibaba的专栏 - CSDNBlog
Effective Java 笔记(七) - ilibaba的专栏 - CSDNBlog
《代码大全》读书笔记 - ilibaba的专栏 - CSDNBlog
一个Dijkstra算法的完整Java程序实现,- brokencar的专栏 - CSDNBlog
effective java读书笔记
阅人有术(转载) - icdbow的专栏 - CSDNBlog
酒店业GDS - linyunliang的专栏 - CSDNBlog
IPD流程概述 - liyonghust的专栏 - CSDNBlog
Drupal专业开发指南 第2章 创建一个模块(1) - g089h515r806的专栏 - CSDNBlog
web.xml配置的详细说明 - eako的专栏 - CSDNBlog
VC 的工程文件说明 - piero_hover的专栏 - CSDNBlog
各类开源软件目录2007 - funson的专栏 - CSDNBlog
推荐引擎:从搜索到发现 - java060515的专栏 - CSDNBlog
十方面经典名录 - 亦风亦尘的专栏 - CSDNBlog
C语言陷阱和缺陷zz - 刀目村的专栏 - CSDNBlog
apache index dirctory乱码问题 - newman0708的专栏 - CSDNBlog
计算机核心期刊投稿指南1 - Nicholas黎的专栏 - CSDNBlog
动 态 语 言 - bobseadream的专栏 - CSDNBlog
计算机核心期刊投稿指南 - Nicholas黎的专栏 - CSDNBlog
软件工程文档模板----一、可行性研究报告 - lihuaidong521的专栏 - CSDNBlog
Drupal专业开发指南 第2章 sdfsdf建一个模块(1) - g089h515r806的专栏 - CSDNBlog
关于js操作word和excel的若干方法汇总(l来自hcleon的专栏) - wfx1018的专栏 - CSDNBlog
处理好人际关系 的30个原则 - 深之JohnChen的专栏 - CSDNBlog
PPT经常 用的115个技巧 - 张艳 的 专栏 - CSDNBlog