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

相关推荐
海兰1 分钟前
【开篇】Spring AI、OpenClaw 和Hermes
java·人工智能·spring·spring ai
憨波个3 分钟前
【说话人日志】DOVER:diarization 输出融合算法
人工智能·算法·音频·语音识别·聚类
skilllite作者4 分钟前
Zed 1.0 编辑器深度评测与实战指南
开发语言·人工智能·windows·python·编辑器·agi
2401_882273725 分钟前
pattern属性在旧版Android浏览器无效怎么办_手动验证补充【操作】
jvm·数据库·python
爱学习的张大5 分钟前
具身智能论文问答(四):pi0
人工智能·算法
bzmK1DTbd9 分钟前
微服务架构设计:Spring Cloud Gateway与Nacos集成
java·spring·微服务
上弦月-编程10 分钟前
指针编程:高效内存管理核心
java·数据结构·算法
罗超驿11 分钟前
双指针算法经典案例:LeetCode 283. 移动零(Java详解)
java·算法·leetcode
xieliyu.12 分钟前
Java手搓数据结构:栈与队列模拟实现
java·数据结构·学习
清水白石00813 分钟前
深入 Python 循环引用与垃圾回收:如何应对内存管理的挑战
java·jvm·python