java9之前finalizer,java9使用cleaner代替了finalizer.相比finalizer,cleaner(它存在于一个独立类Cleaner中,需要时候注入到对应类中即可)不会污染API而且cleaner有类库可以控制它的线程(它两都在后台线程中执行). 避免使用的原因: 行为的不稳定性 它两都不能保证及时的执行,从方法可达到(对象被置空了)开始到最终的执行,时间是任意长的.所以千万不要使用他们来更新重要的持久状态,如释放流资源.分布式锁等. System.gc和System…
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 8. 避免使用Finalizer和Cleaner机制 Finalizer机制是不可预知的,往往是危险的,而且通常是不必要的. 它们的使用会导致不稳定的行为,糟糕的性能和移植…
Finalizer和Cleaner并不等同于C++中的析构函数,是不确定多久会被调用的,甚至有时候可能不会被调用,因此除了作为一个安全网或者终止非关键的本地资源,不应该在Finalizer或Cleaner里面包含任何业务代码.…
好处 有名称,能见名知意.例如BigInteger的probablePrime方法 享元模式.单例模式中使用 享元模式:创建对象代价很高,重复调用已有对象,例如数据库连接等.享元模式是单例模式的一个拓展. 可以返回原类型的任何子类型 可以通过参数值添加业务逻辑返回不同对象,基于第3点 interface Demo {     static Demo getDemoByParam(Integer param) {         if (param > 0) {             retur…
在阅读本文之前最好对 Reference 框架有一个整体的把握,可以参考我上一篇博客 Reference 框架概览 :本文主要讲了 Reference 的子类实现和应用(SoftReference,WeakReference,PhantomReference): Java 引用的强弱关系:StrongReference > SoftReference > WeakReference > PhantomReference 一.StrongReference 强引用:我们通常使用的引用,形如…
<Effective Java>这本书的结构是90来条tips,有长有短,每条tip都值的学习.这里根据对书中每条tip的理解做简短的总结,方便日后回顾.持续更新~ 1. 考虑用静态方法代替构造方法 要考虑使用静态方法返回对象的理由如下: (1)构造方法名字没有特殊含义,只能是类名.而静态方法可以自己取名,让人一看就知道这个方法的作用.如:Executors.newFixedThreadPool(); (2)构造方法没有静态方法灵活,构造方法一旦调用就必然生成了对象,而静态方法里则可以自己写代…
来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. (译者)在这里第一时间翻译成中文版.供大家学习分享之用. 本书的源代码见 jbloch/effective-java-3e-source-code. 目录 0…
经过反复不断的拖延和坚持,所有条目已经翻译完成,供大家分享学习.时间有限,个别地方翻译得比较仓促,希望有疑虑的地方指出批评改正. 第一章简介 忽略 第二章 创建和销毁对象 1. 考虑使用静态工厂方法替代构造方法 2. 当构造方法参数过多时使用builder模式 3. 使用私有构造方法或枚类实现Singleton属性 4. 使用私有构造方法执行非实例化 5. 使用依赖注入取代硬连接资源 6. 避免创建不必要的对象 7. 消除过期的对象引用 8. 避免使用Finalizer和Cleaner机制 9.…
1. 考虑使用静态工厂方法替代构造方法 一个类可以提供一个公共静态工厂方法,它只是返回类实例的静态方法.例如JDK的Boolean的valueOf方法: public final class Boolean implements java.io.Serializable, Comparable<Boolean> { public static final Boolean TRUE = new Boolean(true); public static final Boolean FALSE =…
第1条 用静态工厂方法代替构造器 这个静态工厂,与设计模式中的静态工厂不同,这里的静态工厂方法,替换为“静态方法”比较好理解,主要就是建议编写静态方法来创建对象. 使用静态方法的好处: 1.静态方法有名称,可以确切地描述功能,比如根据哪些参数,返回哪种类型: 2.不需要先创建对象实例,再调用方法来创建所需的对象:使用静态方法可以直接使用类名加静态方法名即可调用: 3.可以返回原类型的任何子类型对象: 4.可以通过传入不同的参数,获得不同的返回值: 5.方法返回的对象所属的类,在编写包含该静态方法…