调用System.gc()或finalize()方法时内部发生了什么(JVM)?

Ton*_*ony 5 java garbage-collection jvm finalize

调用System.gc()或finalize()方法时内部发生了什么(JVM)?

这真的是收集垃圾还是降低性能?

Bil*_*ard 8

当您调用System.gc()时,恰好发生了与JVM相关的事情.JVM将此调用视为一个建议,它可能是运行垃圾收集器的好时机,因此不要依赖它.

当JVM确定对该对象没有更多可访问的引用时,垃圾收集器会在对象上运行对象的finalize()方法.你不应该在你的代码中调用它.请记住,在程序丢失最终引用时,不会调用finalize(),而是在将来运行垃圾收集器时调用,因此不要依赖于它在特定时间点(或在所有).


Nor*_*rtl 1

System.gc()正如其名称所示,通过调用垃圾收集器来运行。此时,当对象真正被删除时,会finalize()在这些对象消失之前调用 。

or最后一个问题中不应有“ ”。这是垃圾收集降低了性能。

通常你根本不应该关心,gc因为它对你来说确实很有用。在某些使用场景中,您希望在某个时间点删除大量对象;那么这是可行的。

  • System.gc() 不一定会调用 GC。它只是向 JVM 建议运行 GC 的合适时机,但运行 GC 的最终决定由 JVM 决定。 (13认同)