我对 java 的 system.gc() 和 Finalize() 方法感到困惑。
我们不能强制将垃圾对象收集到 JVM。我们可以在java代码中编写这两种方法,那么如果它们都用于垃圾收集,那么java提供两种垃圾收集方法有什么意义呢?
请告诉我这两种方法的确切工作原理以及其内部如何工作?
System.gc()
恳请系统执行垃圾收集。 Javadoc 说:
运行垃圾收集器。
您无法控制垃圾收集器的工作“努力”程度。垃圾收集器的内部工作方式是特定于虚拟机的,并且它本身就是一个研究主题。但通常会进行“完整”垃圾收集和一些较小的“增量”收集。所以考虑System.gc
作为请求,但不能保证您的对象会发生垃圾收集。
Object.finalize()
可以重写以指定当给定对象被垃圾收集时要执行的操作(实际上是在垃圾收集之前要执行的操作)。 Javadoc 说:
垃圾收集时由对象上的垃圾收集器调用
确定不再有对该对象的引用。
终结器的经典用途是在对象被垃圾收集时取消分配系统资源,例如释放文件句柄、临时文件等
当 JVM 退出时,不要使用终结器执行操作。为此,请使用您注册的关闭挂钩Runtime.getRuntime().addShutdownHook(Thread)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)