-1

在回收对象占用的内存之前,垃圾收集器会调用 Finalize 方法,该对象具有 finalize() 方法。这意味着您不知道对象何时完成。

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

4

2 回答 2

2

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

这是一个深思熟虑的设计选择。这使 JVM 可以灵活地一次(并且以某种方式)进行垃圾收集,从而提供最佳性能或最少的暂停……取决于用户选择的收集器。

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

不。

唯一可以保证的是,在 JVM 决定“放弃”并抛出OutOfMemoryError.

System.gc()您可以调用一种方法来向 JVM建议它应该运行垃圾回收。然而:

  • JVM 可以忽略该建议。

  • 如果 JVM 注意到这个建议,那么你的应用程序的性能可能会比让 JVM 决定的情况更差。调用System.gc()生产代码几乎总是一个坏主意。


底线是,如果你想保证某个动作发生,你不应该使用终结器来实现那个动作。

于 2013-08-18T09:20:26.323 回答
0

垃圾回收何时完成取决于实现,但通常会在空闲内存达到某个阈值以下时发生。

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

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

这是一种方法System.gc

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

但是,也不鼓励使用它。

于 2013-08-18T08:26:38.263 回答