我需要知道在JVM中何时调用finalize()方法.我创建了一个测试类,当finalize()方法被调用时,它会通过重写写入一个文件.它没有被执行.有谁能告诉我它不执行的原因吗?

推荐答案

一般来说,最好不要依靠finalize()来做任何清理等工作.

根据Javadoc(值得一读),它是:

当垃圾回收确定不再有对对象的引用时,由对象上的垃圾回收器调用.

正如约阿希姆所指出的,如果对象总是可访问的,那么在程序的生命周期中可能永远不会发生这种情况.

此外,垃圾收集器不保证在任何特定时间运行.总的来说,我想说的是,一般来说,finalize()可能不是最好的方法,除非你有什么特别的需要.

Java相关问答推荐

表格栏上的事件过滤器在PFA中不起作用

使用ExecutorService时在ThreadFactory中触发自定义newThread函数

给定Java枚举类,通过值查找枚举

只需最少的代码更改即可将版本号标记添加到日志(log)

RichFaces 3.x-Spring Boot-迁移web.xml

如何创建同一类的另一个对象,该对象位于变量中?

基于调车场算法的科学计算器

为什么Java编译器不区分不同类型的方法?

在Java 17中使用两个十进制数字分析时间时出错,但在Java 8中成功

Java中将文本拆分为数字或十进制数字和字符串

使用存储在字符串变量中的路径目录打开.pdf文件

允许同时执行两个方法,但不能同时执行这两个方法

当构造函数创建一个新实例时,Java为什么需要&new";

Java.lang.invke.LambdaConversionException:实例方法InvokeVirtual的参数数量不正确

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

在整数列表中查找和可被第三个整数整除的对时出现无法解释的RunTimeError

在Spring Boot中使用咖啡因进行缓存

将基于实例编号的对象列表拆分为新的对象列表

Java中的一个错误';s stdlib SocksSocketImpl?

将Optionals/null安全添加到嵌套的flatMap/流