Java的finalize方法干什么,java中finalized的用法
如何解决写爬虫IP受阻的问题?立即使用。
finalize()方法是Object类中提供的方法。在GC准备释放被对象占用的内存空间之前,它将首先调用finalize()方法。它在对象中的定义如下:
受保护的void finalize()抛出Throwable { }1 finalize()调用的时机
与C的析构函数不同(析构函数会在对象被清除之前被调用),在Java中,由于GC的自动回收机制,不能保证finalize方法会被及时执行(垃圾对象的回收时机不确定),也不能保证它们会被执行(程序自始至终从不触发垃圾回收)。
公共类终结器{
@覆盖
受保护的void finalize()抛出Throwable {
system . out . println( Finalizer-finalize());
}
公共静态void main(String[] args) {
Finalizer f=new Finalizer();
f=空;
}
}
//没有输出公共类终结器{
@覆盖
受保护的void finalize()抛出Throwable {
system . out . println( Finalizer-finalize());
}
公共静态void main(String[] args) {
Finalizer f=new Finalizer();
f=空;
system . GC();//手动请求gc
}
}
//输出终结器-Finalize ()2 什么时候应该使用它
finalize()方法一般用于释放非资源(如打开的文件资源、数据库连接等。)或者调用非Java方法(原生方法)时分配的内存(比如C语言中的malloc()系列函数)。
3 为什么应该避免使用它
首先,由于finalize()方法调用时间的不确定性,从对象变得不可达到finalize()方法执行的时间是任意长的。我们不能依靠finalize()方法来及时回收被占用的资源。可能发生的情况是,在我们耗尽资源之前,gc仍然没有被触发,所以通常的做法是提供显示的close()方法供客户端手动调用。
此外,覆盖finalize()方法意味着需要更多的操作来回收对象,从而延长了回收对象的时间。
4 让对象再活一次
利用finalize()方法最多只能调用一次的特性,我们可以延长对象的生命周期。
类别用户{
公共静态用户user=null
@覆盖
受保护的void finalize()抛出Throwable {
system . out . println( User-finalize());
user=this
}
}
公共类FinalizerTest {
公共静态void main(String[] args)引发InterruptedException {
User User=new User();
user=null
system . GC();
thread . sleep(1000);
user=User.user
System.out.println(用户!=null);//真
user=null
system . GC();
thread . sleep(1000);
System.out.println(用户!=null);//假
}
}推荐教程:《java教程》以上是java中finalize方法做什么的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。