当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


Java Runtime runFinalization()用法及代码示例

在Java中,每个对象都有一个名为finalize()的方法。在回收实际对象被利用的内存之前,垃圾Collector会调用此方法。它为对象提供了在垃圾收集之前执行清理操作的机会。

然而,finalize()的执行并不安全,它取决于垃圾Collector何时决定收集该对象。有时,垃圾收集可能不会在所有情况下立即发生,因此,可能不会立即调用 finalize() 方法。

这就是runFinalization()方法表演开始发挥作用。

了解runFinalization()

runFinalization() 方法是 Runtime 类的一部分,其目的是触发任何正在等待终结的对象的终结方法的执行。其句子结构如下:

public void runFinalization()

runFinalization() 示例:

下面是runFinalization()方法的实现:

Java


// Java Program to demonstrate 
// runFinalization() Method 
  
// Driver Class 
public class FinalizationExample2 { 
      // main function 
    public static void main(String[] args) { 
        // Creating a large number of objects 
        for (int i = 0; i < 5; i++) { 
            new ObjectWithFinalize(); 
        } 
  
        // Running garbage collection explicitly 
        System.gc(); 
  
        // Running finalization explicitly 
        Runtime.getRuntime().runFinalization(); 
  
        // Printing a message after running finalization 
        System.out.println("End of main"); 
    } 
} 
  
class ObjectWithFinalize { 
    @Override
    protected void finalize() throws Throwable { 
        System.out.println("Finalize method called"); 
    } 
} 
输出
Finalize method called
Finalize method called
Finalize method called
Finalize method called
Finalize method called
End of main




上面例子的解释

  • 我们在循环中创建了大量的ObjectWithFinalize对象。
  • 之后,我们显式调用 System.gc() 来建议 JVM 运行垃圾Collector。
  • 然后,我们使用 Runtime.getRuntime().runFinalization() 显式运行终结。

通过显式触发垃圾收集(System.gc()),我们增加了垃圾Collector运行的可能性,随后,可能会调用终结队列中对象的finalize()方法。

Note: System.gc() doesn’t guaranteed that garbage collections is triggered. It will suggest JVM to do so.

结论:

总之,Java 中的 runFinalization() 方法与 java.lang.Runtime 分离,是一个允许开发人员显式运行待终结对象的终结方法的工具。然而,它的使用是有考虑的,并且对于让废料Collector自动欺骗保持性的特权非常犹豫。

  • 垃圾收集时间:报废上诉和最终确定的确切时间是不确定的,取决于垃圾Collector执行、内存方向方案和可用系统资源等因子。
  • 非保证最终确定:作用于非常物理对象的finalise()方法不能保证立即或在特定时钟处失效;当显式命名 runFinalisation() 时它将刷新。 JVM 可以自行决定何时准备好运行终结方法。
  • 自动内存管理:Java 的自动保持性管理(包括抓取)旨在减少手动干扰。开发人员很高兴依靠 JVM 的内在机制,而不是尝试显式验证终结的时间。
  • 最佳实践:如果需要清理,建议使用 try-with-resources 或实现 AutoCloseable 用户接口等替代机制,而不是依赖 finalize()。

实际上,显式调用 runFinalization() 并尝试验证垃圾收集在 well-designed Java 应用程序中并不常见。开发人员通常专注于一段文字,resource-efficient 代码,并存储 JVM 以有效地进行内存管理。了解食物垃圾处理、最终确定和选择智能管理技术的原理对于简单而有效的 Java 程序来说是非常重要的。



相关用法


注:本文由纯净天空筛选整理自sakshinagare2004大神的英文原创作品 Java Runtime runFinalization() Method with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。