eff java_创建和销毁对象---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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值