Java中的finalize()

Java中的内存回收都是通过gc回收器进行回收,但是gc是认识已Java形式分配的对象空间(比如new),如果使用一些特殊的方式分配的空间,一般这种情况主要发生在使用“本地方法”的情况下,“本地方法”是一种在 Java中调用非Java代码的方式,已调用非Java代码分配内存的方式,gc是无法进行回收,所以就产生了finalize()方法。

finalize()是gc回收器在回收一个对象时第一个调用的方法,所以就允许我们在对象回收之前先完成对特殊内内存的清理,但只有到下一次垃圾回收过程中,才会真正的回收对象空间。

finalize()在什么时候被调用? 有三种情况 1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候. 2.程序退出时为每个对象调用一次finalize方法。 3.显式的调用finalize方法 4.当某个对象被系统收集为无用信息的时候,finalize()将被自动调用

但是jvm并不保证finalize()一定会被调用,也就是说finalize的调用是不确定的。

注意三点 1、对象可能不被gc回收 2、垃圾回收并不等于“析构” 3、垃圾回收只与内存有关

Java并不能保证对象会被及时的回收,JVM并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存。

转载于:https://my.oschina.net/u/2258281/blog/876871

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值