理解Java finalize函数

1 问题

  1. Q:finalize的运行机制?
  2. Q:jdk18为什么弃用finalize函数且为什么不推荐使用该函数?

2 方法

  1. 首先finalize是Object类中的内置函数,当GC准备释放对象内存时,程序会自动调用finalize。如下代码一就是一个例子,我们先创建一个Recycle类用于重写finalize方法(在里面打印一段话),这样就可以看见finalize的效果,再创建一个Test类用于测试。(由于回收机制的问题不会立即回收废弃对象所以用System.gc();强制回收。)

(2)

代码清单 1

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 代码一 public class Recycle { @Override protected void finalize() throws Throwable { System.out.println("啊,我死了。"); } } public class Test { public static void main(String[] args) { Recycle recycle = new Recycle(); recycle=null;//将recycle变为垃圾对象。 System.out.println("我要消灭你!"); System.gc(); } } 输出:我要消灭你! 啊,我死了。 |

3 结语

本次周博客了解了finalize的大概执行过程。根据输出可以看到finalize函数已经被执行,并且可以看到它不会影响代码执行的过程先执行的Test的print再执行的finalize。缺点之一也从代码中体现了出来,finalize不会立即调用,具有不确定性,可能会长期不执行,从而会占用资源。

相关推荐
灵感__idea4 小时前
Hello 算法:贪心的世界
前端·javascript·算法
小成202303202655 小时前
Linux高级02
linux·开发语言
camellias_5 小时前
【无标题】
java·tomcat
知行合一。。。5 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.05 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H5 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
澈2075 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
A.A呐5 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子5 小时前
Java:异常(exception)
java·开发语言
lifewange6 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest