Java9的垃圾回收机制Cleaner

垃圾回收是java的最大特点之一,可以大大的解决了c++中依靠程序员去释放内存的压力,但是java提供的用来做为GC前的最后一道防线的finalize方法却并不友好

finalize的缺点

首先finalize的执行时间并不确定,其次finalize会阻碍GC的快速回收,在jvm进行GC时会启动一个finalizethread,当遇到有重写了finalize方法的对象时,会将对象放入finalizethread的中,并形成一个队列,暂时挂起,且运行时间并不确定,这就导致了对象回收的缓慢,如果队列中存在重写的finalize方法有死锁问题则会导致后面的方法都无法执行,这就是我们不提倡重写finalize的原因

Java9垃圾回收机制

在java9中已经将finalize方法废弃

占有非堆资源的对象实例,类应该提供一个方法以明确释放这些资源,如果合适的话他们也应该实现AutoCloseable接口。

java.lang.ref.Cleaner和java.lang.ref.PhantomReference提供更灵活和有效的方式,在对象无法再访问时释放资源。


你可能感兴趣的:(Java9的垃圾回收机制Cleaner)