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

相关推荐
笨手笨脚の18 小时前
Redis: Thread limit exceeded replacing blocked worker
java·redis·forkjoin·thread limit
爱学习的阿磊18 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
Lenyiin18 小时前
Linux 基础IO
java·linux·服务器
松☆19 小时前
Dart 核心语法精讲:从空安全到流程控制(3)
android·java·开发语言
编码者卢布19 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
kaikaile199519 小时前
结构风荷载理论与Matlab计算
开发语言·matlab
切糕师学AI19 小时前
ARM 汇编器中的伪指令(Assembler Directives)
开发语言·arm开发·c#
吴维炜19 小时前
「Python算法」计费引擎系统SKILL.md
python·算法·agent·skill.md·vb coding
q行19 小时前
Spring概述(含单例设计模式和工厂设计模式)
java·spring
吕司19 小时前
Qt的信号与槽
开发语言·qt