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
广告