Java垃圾收集器执行

时间:2013-08-18 08:20:41

标签: java garbage-collection

在回收对象占用的内存之前,垃圾回收器会调用Finalize方法,该对象具有finalize()方法。这意味着你不知道什么时候最终确定对象。

为什么我们不知道垃圾收集器何时运行。 Java的创始人是否也不知道这一点。垃圾收集器运行时会有一个特定的条件或时间(确定)。

2 个答案:

答案 0 :(得分:2)

  

为什么我们不知道垃圾收集器何时运行。

这是一个刻意的设计选择。这使得JVM可以灵活地一次(以某种方式)进行垃圾收集,从而提供最佳性能或最小暂停...取决于用户选择的收集器。

  

垃圾收集器运行时会有一个特定的条件或时间(确定)。

没有

唯一保证的是,在JVM决定放弃"放弃"之前,将运行完整的GC。并抛出一个OutOfMemoryError

有一个System.gc()方法可以调用建议到JVM,它应该运行垃圾回收。但是:

  • 允许JVM忽略该建议。

  • 如果JVM注意到该建议,那么您的应用程序可能会比您让JVM决定更糟糕。在生产代码中调用System.gc()几乎总是一个不好的想法。


最重要的是,如果您想保证某项行动发生,则不应使用终结者实施该行动。

答案 1 :(得分:0)

当垃圾收集完成后,执行过程会发生,但通常会在可用内存达到某个阈值以下时发生。

我记得听说允许实现根本没有垃圾收集!

如果不知道实施细节,然后监控GC正在监控的任何内容,您将无法确定收集何时发生。但即使这样也会出现问题而且非常气馁,因为它完全破坏了Java的可移植性。

方法System.gc

  

建议Java虚拟机花费精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间。

但是也不鼓励使用它。