理解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不会立即调用,具有不确定性,可能会长期不执行,从而会占用资源。

相关推荐
世转神风-13 分钟前
qt-kits-警告:No C++ compiler,无法正常解析工程项目.pro文件
开发语言·c++
翔云 OCR API14 分钟前
承兑汇票识别接口技术解析与应用实践
开发语言·人工智能·python·计算机视觉·ocr
元周民14 分钟前
matlab求两个具有共根的多项式的所有共根(未详细验证)
开发语言·matlab
LYFlied25 分钟前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
guslegend32 分钟前
Tomact高级使用及原理剖析
java
Code blocks33 分钟前
SpringBoot从0-1集成Minio对象存储
java·spring boot·后端
不忘不弃37 分钟前
十进制数转换为二进制数
开发语言
故渊ZY38 分钟前
MyBatis事务原理与实战指南
java·mybatis
唯唯qwe-1 小时前
Day23:动态规划 | 爬楼梯,不同路径,拆分
算法·leetcode·动态规划
做科研的周师兄1 小时前
中国土壤有机质数据集
人工智能·算法·机器学习·分类·数据挖掘