Java 中 finalize方法的意义

程序员都了解初始化的重要性,但是会常常忘记同样重要的清理工作,java有垃圾回收器负责回收无用对象占用的内存资源,但是也有特殊情况,你的对象获得了一块特殊的内存区域,并不是通过 new 方法,由于垃圾回收器只知道释放那些经由new分配的内存, 所以它不知道如何释放这些特殊的内存。

java 考虑到这种情况,允许在类中定义一个名为 finalize() 的方法。他的工作原理是这样的:一旦垃圾回收器准备释放对象占用的存储空间,将首先调用 finalize() 方法,并在下一次垃圾回收动作发生时,才会真正的回收对象占用的内存。就像为垃圾回收器添加一个回调方法一样。

注意: 垃圾回收并不能保证一定能发生,也许你会发现,只要程序没有濒临存储空间用完的那一刻,对象占用的空间永远得不到释放,甚至程序运行结束 垃圾回收器也没有释放你创建的任何对象的存储空间,而是随着操作程序的退出,将资源全部还给操作系统,这个策略是恰当的,因为垃圾回收本身也有开销,要是不实用它,也就不用支付这部分开销了。

finalize 用户何在

到此我们应该明白,不该将 finalize () 作为通用的清理方法,请记住重要的一点,垃圾回收应该只与内存有关。所以和垃圾回收有关的任何行为尤其是finalize 方法,他们也必须同内存及其回收有关

上面说的特殊的内存区域是怎么创建出来的呢?

因为java中一切都是对象,任何区域中的内存都是依附于对象的,这样就将这部分区域限制到很少的场景。那就是可能在java中使用了类似与 C语言 malloc() 方法来分配内存。通过这种方式分配内存,只能使用 free() 方法来释放,否则就会发生内存泄露。

现在我们应该明白,不要过多的使用 finalize() 方法的道理了,因为他确实不是进行普通的清理工作的合适场所。

  • 参考资料
    《Think in Java》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值