第二章 建立和销毁对象缓存
第3条 用私有构造器或者枚举类型强化Singleton属性安全
用私有构造器来保证对象只被实例化一次,使用静态方法返回这个实例,从而实现singleton。spa
反序列化每次都会生成一个新的实例,要抵御这种破坏必须保证每一个实例域都是transient,还要提供一个readResovle方法对象
private Object readResovle(){内存
return INSTANCE;资源
}class
使用枚举来实现singleton,只须要编写一个单元素的枚举类型便可。内存泄漏
第4条 经过私有构造器强化不可实例化能力垃圾回收
只包含静态域和静态方法的类不但愿被实例化,那么编写私有构造器来确保这种状况。序列化
第5条 避免建立没必要要的对象
重用不可变对象和已知再也不修改的对象。
注意自动装箱,避免无心中使用包装类型而致使的装箱拆箱过程当中建立多余的对象。
针对给定对象的特定适配器,无需建立多个适配器实例。(适配器与后备对象的抽象概念的理解暂时不足够清晰)
重复利用对象会想到使用对象池,但若是对象自己很是轻量,其建立销毁的消耗反而会比维护对象池要更轻微。
第6条 消除过时的对象引用
若是对象再也不须要被引用,那么就应该将引用赋值null,从而避免过时对象累积而致使内存泄漏。
缓存中对象过时而未清理,也会致使内存泄漏。
监听器及其回调,回调完成后,没有取消注册,致使内存泄漏。
第7条 避免使用终结方法
尽一切可能不使用终结方法,由于终结方法的调用是不被肯定的。释放资源不该该依赖终结方法,需显示地编写释放方法,而终结方法只可做为安全拦截网,而且要finally模块中调用父类的终结方法,避免异常致使终结方法未能执行而使父类的终结方法未调用。
普通对象经过native方法委托给本地对象,但垃圾回收器不知道本地对象,于是不会被回收。若是本地对等体没有拥有关键资源时,适用终结方法来释放资源,而当本地对等体拥有关键资源时该类应该显式地拥有一个释放资源的方法。