java中的finalize方法有什么作用

互联网 20-7-3

java中的finalize方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。

finalize()方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。其在Object中定义如下:

protected void finalize() throws Throwable { }

1 finalize()调用的时机

与C++的析构函数(对象在清除之前析构函数会被调用)不同,在Java中,由于GC的自动回收机制,因而并不能保证finalize方法会被及时地执行(垃圾对象的回收时机具有不确定性),也不能保证它们会被执行(程序由始至终都未触发垃圾回收)。

public class Finalizer { 	@Override 	protected void finalize() throws Throwable { 		System.out.println("Finalizer-->finalize()"); 	}  	public static void main(String[] args) { 		Finalizer f = new Finalizer(); 		f = null; 	} } //无输出
public class Finalizer {  	@Override 	protected void finalize() throws Throwable { 		System.out.println("Finalizer-->finalize()"); 	}  	public static void main(String[] args) { 		Finalizer f = new Finalizer(); 		f = null; 		 		System.gc();//手动请求gc 	} } //输出 Finalizer-->finalize()

2 什么时候应该使用它

finalize()方法中一般用于释放非资源(如打开的文件资源、数据库连接等),或是调用非Java方法(native方法)时分配的内存(比如C语言的malloc()系列函数)。

3 为什么应该避免使用它

4 让对象再活一次

利用finalize()方法最多只会被调用一次的特性,我们可以实现延长对象的生命周期。

class User{ 	 	public static User user = null;  	@Override 	protected void finalize() throws Throwable { 		System.out.println("User-->finalize()"); 		user = this; 	} 	 }  public class FinalizerTest { 	public static void main(String[] args) throws InterruptedException { 		User user = new User(); 		user = null; 		System.gc(); 		Thread.sleep(1000); 		 		user = User.user; 		System.out.println(user != null);//true 		 		user = null; 		System.gc(); 		Thread.sleep(1000); 		System.out.println(user != null);//false 	} }

推荐教程: 《java教程》

以上就是java中的finalize方法有什么作用的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: java
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:swoole到底可以多线程么

相关资讯