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

相关推荐
m0_66257797几秒前
C++中的RAII技术深入
开发语言·c++·算法
旖-旎几秒前
二分查找(点名)(8)
c++·算法·二分查找·力扣
m0_743470373 分钟前
Python字典与集合:高效数据管理的艺术
jvm·数据库·python
2501_945423543 分钟前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python
承渊政道4 分钟前
【优选算法】(实战体验滑动窗口的奇妙之旅)
c语言·c++·笔记·学习·算法·leetcode·visual studio
lemonth5 分钟前
图形推理----
人工智能·算法·机器学习
学习要积极7 分钟前
Springboot图片验证码-EasyCaptcha
java·spring boot·后端
2401_851272998 分钟前
使用Python进行量化交易入门
jvm·数据库·python
码云数智-园园10 分钟前
测试双雄:单元测试与集成测试的深度解析与实战指南
开发语言
故城、14 分钟前
Python进阶
开发语言·python