清理:处理终结和垃圾回收

首先,Java也有垃圾收集器,且回收不在使用的对象占据的内存,但有一种特殊的情况-------没有使用new,但垃圾收集器只知道释放由new分配的内存,此时就需要用到finalize()方法。

在理想情况下,它的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存。

所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。

 

在Java编程中,Java对象并发总是被垃圾回收:

1 .我们的对象可能不会被来当作垃圾收走

有时可能发现一个对象的存储空间永远都不会释放,因为自己的程序永远都接近于用光空间的临界点。若程序执行结束,而且垃圾收集器一直都没有释放我们创建的任何对象的存储空间,则随着程序的退出,那些资源会返回给操作系统。这是一件好事情,因为垃圾收集本身也要消耗一些开销。如永远都不用它,那么永远也不用支出这部分开销。

2.垃圾回收并不等于"析构"

首先Java并没有提供"析构"函数,如果要做类似的清理需要自己手动创建一个执行清理的工作方法。

3.垃圾回收之和内存有关

作者强调一般不该将finalize()方法作为通用的清理方法,其原因就是以上红字2点。

 

实施清理

Java不允许我们创建本地(局部)对象——无论如何都要使用new。但在Java中,没有“delete”命令来释放对象,因为垃圾收集器会帮助我们自动释放存储空间,因此Java不存在析构函数。随着以后学习的深入,就会知道垃圾收集器的存在并不能完全消除对破坏器的需要,或者说不能消除对破坏器代表的那种机制的需要(而且绝对不能直接调用finalize(),所以应尽量避免用它)。

  无论是"垃圾回收" 还是中介,都不能保证一定发生。如果Java虚拟机为面临内存耗尽的情况下,它是不会浪费时间去执行垃圾回收来回复内存的。

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值