finalize()的调用

原创 2016年06月01日 13:31:39

public class A {
	public A() {
		System.out.println("A()");
	}
	
	protected void finalize() throws Throwable {
		System.out.println("~A()");
	};
}

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		a = null;
		System.gc();
	}
}

可以看到这里输出:

A()
~A()


假如将代码修改成这样子:

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		System.gc();
	}
}


可以看到这里输出:

A()

原因也很简单,在这里调用System.gc()的时候,临时变量还在生命周期中。所以不会被回收。




有时候

public class TestFinalize {
	public static void main(String[] args) {
		A a = new A();
		a = null;
		System.gc();
	}
}
还是不会输出~A(),原因也很简单,System.gc()仅仅是建议性的gc,是否执行gc要看gc系统。







相关文章推荐

finalize()方法调用的时机

【示例一】 package com.jjyy.basic; /** * finalize方法会在什么时间执行? * * @author jiangyu 2015年9月9日 * */ pub...

CLR Via C#读书笔记——Finalize方法被调用的时机【2011-01-18】

Finalize方法在垃圾收集结束时被调用,有5种事件会导致一个对象的Finalize方法被调用:1.第0代对象充满:第0代对象充满时开始执行垃圾收集。该事件是目前导致Finalize方法被调用的最常...

java中gc()何时调用finalize()方法

有人会说:这个简单,直接调用System.gc()或者Runtime.getRuntime().gc();就可以了 。那我想说System.gc()到底什么时候调用finalize()呢?下面的列子...

final, finally, finalize的区别

  • 2011年02月15日 09:25
  • 867B
  • 下载

关于finalize()方法(总结)

finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,g...

Java中finalize()的用法

  • 2014年12月15日 12:39
  • 33KB
  • 下载

java垃圾回收机制和finalize()方法

一、java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。        (1).对象不一定会被回收。        (2).垃圾回收不是析构函...
  • lurao
  • lurao
  • 2016年04月23日 11:43
  • 1757

java中final,finally,finalize三个关键字的区别

final 当这个关键字修饰一个类时,意味着他不能派生出新的子类,也就是说不能被继承,因此一个类不能被同时声明为abstract和final。当final修饰变量或者方法时,可以保证他们在使用中不会...
  • NDboy
  • NDboy
  • 2015年05月06日 14:06
  • 2986

关于final、finally、finalize的区别

1.final 的作用Java中的关键字,主要用来修饰Java类、Java方法以及Java变量(成员变量或局部变量) 当一个类被声明为final,意味着他不能再派生出新的子类,不能作为父类被继承。例如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:finalize()的调用
举报原因:
原因补充:

(最多只允许输入30个字)