Java垃圾收集器执行

Java垃圾收集器执行,java,garbage-collection,Java,Garbage Collection,在回收对象占用的内存之前,垃圾收集器会调用Finalize方法,该对象具有Finalize()方法。这意味着您不知道何时将最终确定对象 为什么我们不知道垃圾收集器何时运行。Java的创始人也不知道这一点吗。垃圾回收器运行时会有一个特定的条件或时间(当然)。垃圾回收完成时取决于实现,但通常会在可用内存达到某个阈值以下时发生 我记得听说允许实现完全没有垃圾收集 在不知道实现细节并监视GC正在监视的任何内容的情况下,您将无法确定何时会发生收集。但是,即使这样也会有问题,这是非常不鼓励的,因为它完全破坏

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


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

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

我记得听说允许实现完全没有垃圾收集

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

该方法包括:

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

然而,也不鼓励使用这种方法

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

这是一个深思熟虑的设计选择。这使JVM能够灵活地在某个时间(以某种方式)执行垃圾收集,从而提供最佳性能或最小的暂停。。。取决于用户选择的收集器

当垃圾收集器运行时,将有一个特定的条件或时间(当然)

没有

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

有一个
System.gc()
方法,您可以调用它来建议JVM运行垃圾收集。然而:

  • 允许JVM忽略该建议

  • 如果JVM注意到这个建议,那么应用程序的性能可能会比让JVM决定的性能更差。在生产代码中调用
    System.gc()



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

+1我要补充的是,终结器中运行的代码引发的任何异常都将被吞没,代码将悄无声息地消失,导致难以发现的bug。