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 (); ,,,} ,,} }
上面可以看出:
清洁是最终类不能被重写,内部方法基本以静态方法提供掌握例子上面的方法即可