订阅《专栏合集》,解锁所有文章。
有一些和垃圾回收相关的基础概念,这里一一梳理,让读者有个印象。
文章目录
对象的finalization机制
Java 应用程序中可以使用对象终止(finalization)机制来允许开发人员提供对象被销毁前的自定义处理逻辑。
垃圾回收器回收一个对象之前,总是会先调用这个对象的finalize()方法。
Object对象的finalize()方法允许被子类重写,用于在对象被回收前进行最后的处理,比如释放某些资源:关闭文件、Socket、数据库连接。
不建议手动调用某个对象的finalize()方法,应该交由垃圾回收机制调用。因为:
1)在finalize()方法中,可能导致对象复活;
2)finalize()方法的执行时间是没有保障的,完全由GC线程决定。极端情况下,若不发生GC,则finalize()方法永远得不到执行。
3)一个糟糕的finalize()方法会严重影响GC的性能。比如finalize()方法中有耗时的操作。
因为finalization机制的存在,JVM中的对象可能有3种状态:
-
可触及的:从根节点开始搜索,可以到达这个对象。
-
可复活的:对象的所有引用都被释放,但是可能在finalize()方法中被复活。
-
不可触及的:对象的fi