Java的finalize方法干什么,java中finalized的用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: