java中的System.gc()和finalize()方法有什么区别?

say*_*ali 14 java garbage-collection finalize

我在java的system.gc()和finalize()方法之间混淆.我们不能强制将垃圾对象收集到JVM.我们允许在我们的java代码中编写这两种方法然后如果两者都用于垃圾收集,那么为java提供两种垃圾收集方法有什么意义呢?

请告诉我两种方法的确切工作方式以及内部工作原理如何?

ewe*_*nli 11

System.gc()请求系统执行垃圾收集.Javadoc说:

运行垃圾收集器.

你无法控制垃圾收集器的"硬"程度.垃圾收集器如何在内部工作是特定于VM的,并且是一个独立的研究课题.但是通常会有"完整"的垃圾收集和一些较小的"增量"收集.因此,请考虑System.gc作为请求,但不保证您的对象的垃圾收集将发生.

Object.finalize()可以覆盖以指定当给定对象被垃圾收集时要做什么(实际上在垃圾收集之前要做什么).Javadoc说:

当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用.

终结器的经典用法是在对象被垃圾收集时解除分配系统资源,例如释放文件句柄,临时文件等.

当JVM退出时,不要使用终结器来执行操作.为此,请使用您注册的关闭钩子Runtime.getRuntime().addShutdownHook(Thread).