finalize() 方法

- 当初的坑

final.finally,finalize 这三个有什么区别?没错,就是这样问的。撒时候学过finalize关键字?后来才发现,自己下意识的认知就是错的,明摆的坑要别人去跳。finalize不是关键字,是一个方法finalize()

- 工作发现

较前两个关键字的应用,finalize()基本用不到,之前的坑就见怪不怪了。在此,记录了解并备后用。

- finalize()简谈

它涉及到了Java的垃圾清理工作。Java有垃圾回收器负责回收无用对象占据的内存资源(由new分配)。如果,不是new分配而获得的一块"特殊"内存(下面说明),怎么释放?为了应对这种情况,Java允许在类中定义一个名为finalize()的方法。**它的工作原理:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。**所以要是你打算用finalize(),就能在垃圾回收时做一些重要的清理工作。

"特殊"内存:分配内存时有可能采用了类似C语言的做法,而非Java中的通常做法。这种情况主要发生在使用"本地方法"的情况下。本地方法目前只支持C和C++,这两种语言可以调用其他语言写的代码,所以实际上可以调用任何代码。比如:在非java代码中,也许调用C的malloc()函数系列来分配存储空间,而且除非调用free()函数,否则存储空间得不到释放,从而造成内存泄露。当然,free()函数是C和C++中的函数,所以要在finalize()中用本地方法调用从而释放内存(记住:垃圾回收只与内存有关)。

- 小小的总结

不要过多的使用finalize(),它确实不是进行普通的清理工作的合适场所。通常,finalize()只能存在于程序员很难用到的一些晦涩用法里面。

- PS

API中对Object类finalize()的说明:protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法;



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值