创建和销毁对象---Effactive java

书写的好处就是,可以减少大脑记忆的压力,同时会加深对内容的理解。
1、考虑使用静态工厂代替构造函数
好处:1)BigInteger.probablePrime,通过该种静态方法能够更直观的获得构造函数所不能表示的信息。2)不一定每次都要创建一个新的对象。3)可以返回当前类的子类具备更好的灵活性 ;
常见的 valueOf getInstance
https://www.jianshu.com/p/ceb5ec8f1174

2、使用私有构造函数强化singleton属性
也就是说只能通过getInstance获取实例,在一定程度上提高了使用的灵活性,在不改变API的情况下,可以改变实现。
注意:在序列化与反序列化时要重写 readResolve()?,以免创建新的实例

3、通过私有构造函数强化不可实例化的能力
如 Private Arrays(){} 全部都是静态方法,这种类应该避免被实例化,防止滥用,通过把类做成抽象类也是行不通的,该类的子类可以实例化。

4、避免重复创建对象
1)重用非可变对象 字符串、 Boolean.valueOf 2)可变对象,但是不再产生变化。

5、消除过期的对象引用
java也会有个OOM的问题,不要持有无用的对象引用。
java在对象不可达后,垃圾回收器会回收与该对象相关联的存储空间。

6、避免使用终结函数
有两种理解:
(1)、在网上搜了一下java终结函数,涉及到的内容全部都是effactive java ,我很怀疑,终结函数是很早以前的jdk 版本提供的,当前的版本已经不在支持

(2)、这节中提到了InputStream和OutputStream还有Timer的终结函数:
Timer中的cancel如下:
public void cancel() {
synchronized(queue) {
thread.newTasksMayBeScheduled = false;
queue.clear();
queue.notify(); // In case queue was already empty.
}
}

可以了解到jre并没有提供终结函数,终结函数只是我们用来清理内存的一种显示方式,但是jvm如何检查到我们自己定义的函数,并且在执行System.runFinalizersOnExit(已废弃),之前调用.

@Deprecated
public static void runFinalizersOnExit(boolean value) {
    Runtime.runFinalizersOnExit(value);
}

推荐阅读更多精彩内容

  • 我不想再想你了。
    星艾月阅读 146评论 0 0
  • 第一个梦想,工作可以不仅为钱,还能真正做点有意义或浪漫的事。 第二个梦想,有一个我可以为之付出而不计较他/她回报的...
    Elanor阅读 50评论 0 0
  • 你偷了我的时间 却丰富了我的人生 你许我一世温柔 我许你一生相伴
    西贝麗麗阅读 39评论 0 0
  • 人们常说“人生如戏”,如果说人生真的是一部戏,那么我们每个人都是戏中的主角。 昨天晚上去跑步碰到了一个同班级却没有...
    潜于世阅读 234评论 0 0