finalize()方法调用的时机

原创 2015年09月09日 09:41:08

【示例一】

package com.jjyy.basic;
/**
 * finalize方法会在什么时间执行?
 * 
 * @author jiangyu 2015年9月9日
 *
 */
public class FinalizeDemo {
	public static void main(String[] args) {
		Demo demo = new Demo();
		System.out.println("begin to set demo to null");
		demo = null;
		System.out.println("demo was set to null");
	}
}

class Demo{

	@Override
	protected void finalize() throws Throwable {
		System.out.println("Demo finalized");
		super.finalize();
	}
}
/*
结果为:
begin to set demo to null
demo was set to null

注意:finalize()不一定会在将引用设置为null的时候
*/

从示例一的结果来看,并没有在将引用置为null的时候调用了finalize()方法,所以结论为:

finalize()方法根本没有被执行,看一下java中对finalize方法的定义:Called by the garbage collector on an object when garbage collection determines that there are no

 more references to the object.。当垃圾回收确认没有指向对象的引用时,执行回收。而上面的代码新建的对象Demo的唯一引用d已经被释放,而确有执行Demo类的finalize方

法,唯一的原因只能是gc并没有执行,gc只有在JVM内存不足的时候才会自动执行。

【示例二】
package com.jjyy.basic;
/**
 * 程序员手动的控制gc()的运行时机
 * 
 * @author jiangyu 2015年9月9日
 *
 */
public class FinalizedGCDemo {
	public static void main(String[] args) {
		DemoGC demoGC = new DemoGC();
		System.out.println("begin to set demoGC to null");
		demoGC = null;
		System.out.println("demoGC was set null");
		System.out.println("begin to run gc");
		System.gc();
		System.out.println("gc was runed ");
	}
}

class DemoGC{

	@Override
	protected void finalize() throws Throwable {
		System.out.println("Demo finalized");
		super.finalize();
	}
}
/*
结果为:
begin to set demoGC to null
demoGC was set null
begin to run gc
gc was runed 
Demo finalized
结论:
 所以finalize方法只有在JVM执行gc时才会被执行,所以我们在写代码用到的时候需注意。
*/


作业day13——IO流与文件

1.    PrintStream、BufferedWriter、PrintWriter的比较?  PrintStream和PrintWrite 1.   PrintStream主要操作byte流...
  • wjialeS
  • wjialeS
  • 2016年03月09日 21:11
  • 493

inux查看磁盘读写性能(iostat命令)的方法

在linux中查看或监控磁盘的读写性能,可以用到iostat命令,本节介绍下其具体用法。 1,硬盘读写性能, #查看TPS和吞吐量信息 iostat -d -k 1 10    ...
  • n8765
  • n8765
  • 2016年07月27日 13:57
  • 456

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()呢?下面的列子...

activity中onSaveInstanceState方法调用时机详解

onSaveInstanceState什么时候调用?onSaveInstanceState()的调用时机: 在activity的一个生命周期中,onSaveInstanceState()并非一定调用...
  • Rflyee
  • Rflyee
  • 2016年03月21日 20:31
  • 3486

关于Activity onNewIntent方法的调用时机

在官方API上的说明如下: http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.c...

(copy)赋值构造函数的4种调用时机or方法

分析了赋值构造函数的4种调用时机,每种都有demo代码演示

Activity的onRestart()方法调用时机

在项目中看到Activity使用onRestart(),平时对这个方法的调用时机知道的比较少,研究一下它啥时候会被调用。 代码很简单: public class MainActivity exte...

自定义view中onMeasure、onLayout、onDraw、onFinishInflate、onSizeChanged方法调用时机

一般自定义view或viewGroup基本上都会去实现onMeasure、onLayout、onDraw方法,还有另外两个方法是onFinishInflate和onSizeChanged。 on...

java finalize方法的使用

《JAVA编程思想》: Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。           (1).对象不一定会被回收。        (2)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:finalize()方法调用的时机
举报原因:
原因补充:

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