java提供finalize方法,在垃圾回收器释放内存是首先会调用finalize方法。
- 对象不一定会被回收
- 垃圾回收不是析构函数
- 垃圾回收只与内存有关
- 垃圾回收和finalize都是靠不住的,只要内存没有快到耗尽的地步,它是不会浪费时间进行垃圾回收的
finalize调用的真实情况:
- 所有对象被Garbage collection自动调用,比如调用System.gc()的时候
- 程序退出的时候每个对象调用finalize方法
- 显示的调用finalize方法
- public class FinalizationDemo {
- public static void main(String[] args) {
- Cake c1 = new Cake(1);
- Cake c2 = new Cake(2);
- Cake c3 = new Cake(3);
- c2 = c3 = null;
- System.gc(); //Invoke the Java garbage collector
- }
- }
- class Cake extends Object {
- private int id;
- public Cake(int id) {
- this.id = id;
- System.out.println("Cake Object " + id + "is created");
- }
- protected void finalize() throws java.lang.Throwable {
- super.finalize();
- System.out.println("Cake Object " + id + "is disposed");
- }
- }
- Cake Object 1is created
- Cake Object 2is created
- Cake Object 3is created
- Cake Object 3is disposed
- Cake Object 2is disposed