Java 9 中 Cleaner 類有哪些用途?


程式執行期間建立的物件將由垃圾回收器(GC)自動移除。當某個物件沒有被任何執行緒引用,且 JVM 判定此物件不可訪問時,它就有資格進行垃圾回收。

Object 類有一個finalize()方法,在 GC 嘗試從堆中移除物件之前,該方法將被 GC 自動呼叫。在Java 9中,finalize()已被棄用,並且垃圾回收管理中加入了java.lang.ref.Cleaner新類。當某物件有資格進行垃圾回收時,Cleaner類的物件將自動得到通知。要被回收的物件需要使用register()方法在 Cleaner 物件中註冊

示例

import java.lang.ref.Cleaner;
public class CleanerTest {
   public static void main(String args[]) {
      System.out.println("TutorialsPoint");
      Cleaner cleaner = Cleaner.create();
      if(true) {
         CleanerTest myObject = new CleanerTest();
            cleaner.register(myObject, new State());    // register cleaner
      }
      for(int i = 1; i <= 10000; i++) {
         String[] largeObject = new String[1000];
         try {
            Thread.sleep(1);
         } catch(InterruptedException e) {
              e.printStackTrace();
         }
      }
   }
   private static class State implements Runnable {
      public void run() {
         System.out.print("Cleaning action");
      }
   }
}

輸出

TutorialsPoint
Cleaning action

更新時間: 2020 年 2 月 24 日

814 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.