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...
  • Before_Morning
  • Before_Morning
  • 2015年09月09日 09:41
  • 1132

关于finalize的调用时机

think in java 中提到GC时,那是不是只要显式的调用了 System.GC() 就会触发 finalize呢? 例如:public class Test { public voi...
  • silenceburn
  • silenceburn
  • 2010年10月19日 20:33
  • 4455

为什么在Java中不使用finalize()方法

我们都知道finalize()方法是回收分配给对象的内存之前调用垃圾收集器线程的基本语句。在这篇文章中,我们将会深入这个方法。 这篇文章中的章节: 1、finalize()方法不能保证执行(这个将...
  • maoyeqiu
  • maoyeqiu
  • 2015年11月01日 22:25
  • 2753

finalize()在什么时候被调用?

finalize()在什么时候被调用?有三种情况1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.2.程序退出时为每个对象调用一次finalize方法...
  • sunstar0806
  • sunstar0806
  • 2009年12月21日 21:50
  • 1210

finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

1、finalize()用在当垃圾回收器,因内存紧张,而去回收某些对象时,这时候会去调用其finalize()方法;而如果内存不紧张,就不会去回收对象,那finalize()就不会被调用;     ...
  • u012324780
  • u012324780
  • 2016年03月25日 23:50
  • 1237

重写 Finalize 方法

Finalize 方法在未能调用 Dispose 方法的情况下充当防护措施来清理资源。您应该只实现 Finalize 方法来清理非托管资源。 Object.Finalize 方法的范围是受保护的。当在...
  • huguojunsy
  • huguojunsy
  • 2004年06月23日 15:47
  • 1493

Java中的finalize方法理解

首先:system.gc()并不是你调用就马上执行的, 而是根据虚拟机的各种算法来来计算出执行垃圾回收的时间,另外,程序自动结束时不会执行垃圾回收的。 其次:对象被回收时,要经过两次标记,第一次标记...
  • q35445762
  • q35445762
  • 2015年07月16日 23:18
  • 1277

Android开发经验—不要指望类的finalize方法干你想要干的活

之所以专门写一篇关于finalize方法的博客,是因为被这个方法坑过,在写一个读取jni数据类的时候,我在类的finalize方法中调用了关闭文件和释放内存的方法,结果导致在频繁调用这个类的时候在JN...
  • zmywly
  • zmywly
  • 2014年07月17日 19:26
  • 3658

垃圾回收与finalize

垃圾回收 垃圾回收机制具有如下特征:  (1)垃圾回收机制只负责回收对内存中的对象,不会回收任何物理资源(例如数据库连接、网络IO等资源)。  (2)程序无法精确控制垃圾回收的运行,垃圾回收...
  • u012813201
  • u012813201
  • 2017年06月14日 14:51
  • 167

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

一、java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。        (1).对象不一定会被回收。        (2).垃圾回收不是析构函...
  • lurao
  • lurao
  • 2016年04月23日 11:43
  • 1993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:finalize()的调用
举报原因:
原因补充:

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