Java-finalize函数介绍(学习笔记)

  • 介绍

       假如你的对象(并非通过new)获得了一块内存区域,由于垃圾回收器只知道回收那些通过new分配的内存,所以它不知道该如何释放这块内存,为了应对这种特殊情况Java允许在类中定义一个名为finalize()的方法

  • 工作原理

       一旦垃圾回收器准备好释放对象占用的存储空间,将会首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存,所以要是打算用finalize函数,就能在垃圾回收时刻做一些重要的清理动作。

  • 注意说明

       有三点需要注意

       1:对象可能不被垃圾回收。

       2:垃圾回收并不等同于“析构”(C++中销毁对象必须用到这个函数)

       3:垃圾回收只与内存有关

  • 用途

       使用垃圾回收器的唯一原因是为了回收程序不再使用的内存,所以对于与垃圾回收有关的任何行为来说(尤其是finalize函数),它们也必须同内存及其回收有关。

       但这并不意味着对象中含有其他对象,finalize函数就应该明确释放那些对象,因为垃圾回收器会负责释放对象占据的所有内存。这就对finalize函数的需求限制为一种特殊情况,即通过某种创建对象方式以外的方式为对象分配了存储空间,所以之所以要有finalize函数是由于在分配内存的时候可能采用了类似C语言的方法而非Java中的通常做法。这种情况主要发生在使用“本地方法”的情况下,本地方法是一种在Java中调用非Java代码的方式,在非Java代码中也许会调用C的malloc()函数系列来分配空间,而且除非调用free()函数,否则存储空间会一直得不到释放,导致内存泄漏。free是C和C++的函数,所以需要在finalize()中使用本地方法调用它来释放内存。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值