Java9中finalize()的原理是什么

  介绍

Java9中finalize()的原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

java基本数据类型有哪些

java的基本数据类型分为:1,整数类型,用来表示整数的数据类型。2,浮点类型,用来表示小数的数据类型。3,字符类型,字符类型的关键字是“字符”。4,布尔类型,是表示逻辑值的基本数据类型。

<强> 1:finalize()方法

finallize()方法是对象类的方法,用于在类被GC回收时做一些处理操作,但并是JVM不能保证完成(0)方法一定被执行,
由于finalize()方法的调用时机具有不确定性,从一个对象变得不可到达开始,到finalize()方法被执行,所花费的时间这段时间是任意长的。我们并不能依赖finalize()方法能及时的回收占用的资源,可能出现的情况是在我们耗尽资源之前,GC却仍未触发,因而通常的做法是提供显示的关闭()方法供客户端手动调用
所以一般不建议使用完成方法,JDK9开始已久被废除

<强>总结缺点

1:确定机制本身就是存在问题的。

2:确定机制可能会导致性能问题,死锁和线程挂起。

3:确定中的错误可能导致内存泄漏;如果不在需要时,也没有办法取消垃圾回收,并且没有指定不同执行完成对象的执行顺序。此外,没有办法保证finlize的执行时间。
遇到这些情况,对象调用完成方法只有被无限期延后

——观察完成方法延长类生命周期#

class 用户{   ,,   public 才能static  User  User =,空;   ,   @Override才能   protected 才能;void  finalize (), throws  Throwable  {   ,,,System.out.println(“用户——祝辞finalize ()“);   ,,,user =,;   ,,}   ,,   }   ,   public  class  FinalizerTest  {   public 才能;static  void  main (String [], args), throws  InterruptedException  {   ,,,User  User =, new 用户();   ,,,user =,空;   ,,,system . gc ();   ,,,thread . sleep (1000);   ,,,,   ,,,user =, User.user;   ,,,System.out.println (user  !=, null);//真实的   ,,,,   ,,,user =,空;   ,,,system . gc ();   ,,,thread . sleep (1000);   ,,,System.out.println (user  !=, null);//假的   ,,}   }

- JDk9以前的垃圾回收代码

public  class  Finalizer  {      @Override才能   protected 才能;void  finalize (), throws  Throwable  {   ,,,System.out.println(“终结器——祝辞finalize ()“);   ,,}      public 才能;static  void  main (String [], args), {   ,,,Finalizer  f =, new 终结器();   ,,,f =,空;   ,,,,   ,,,system . gc();//手动请求gc   ,,}   }//输出,终结器——祝辞finalize ()

<强> 2:清洁类的使用

简介:

在Java9以后提供了最终类清晰来代替实现,下面看一下官方例子

package 螺纹;      import  java.lang.ref.Cleaner;      public  class  CleaningExample  implements  AutoCloseable {      ,,   private 才能final  static  Cleaner 清洁=Cleaner.create();//,创建者模式创建对象   ,,   static 才能class  State  implements  Runnable{,//清理对象,下面说   ,,,()状态,{   ,,,,,System.out.println (“init");   ,,,}   ,,@Override   ,,,public  void 运行(),{   ,,,,,System.out.println (“close");   ,,,}   ,,}   ,,   private 才能;final  State 状态;   private 才能;final  Cleaner.Cleanable ,可弄干净的,,//,clearner 中的接口,实现唯一的清理方法   ,,   public 才能;CleaningExample (), {   ,,,超级();   ,,,this.state =, new 国家();   ,,,this.cleanable=CLEANER.register(,,),,//,注册清理容器中,并且需要清理对象的引用   ,,}      @Override才能   public 才能;void  close (), throws  Exception  {   ,,,cleanable.clean();,//进行清理操作   ,,}   ,,   public 才能;static  void  main (String [], args), {   ,,,,(真正的),{   ,,,,,new  CleaningExample ();   ,,,}   ,,}      }

上面可以看出:

清洁是最终类不能被重写,内部方法基本以静态方法提供掌握例子上面的方法即可

Java9中finalize()的原理是什么