當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。