在程序执行过程中创建的对象将由垃圾收集器 (GC)自动删除。当某个对象未被任何线程引用时,并且当JVM确定无法访问该对象时,则可以进行垃圾回收。
Object类具有finalize() 方法,在尝试从堆中删除对象之前,GC 将自动调用该方法。在Java 9中,已经不建议使用finalize()方法,并将新类java.lang.ref.Cleaner 添加到垃圾回收管理中。当对象可以进行垃圾回收时,Cleaner 类的对象会自动得到通知。需要通过使用register()方法向清理器对象注册正在垃圾回收的对象。
import java.lang.ref.Cleaner; public class CleanerTest { public static void main(String args[]) { System.out.println("nhooo"); 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"); } } }
输出结果
nhooo Cleaning action