使用期限已满,伊甸园为空:可以将对象移至伊甸园吗?

时间:2018-08-22 10:25:03

标签: java garbage-collection

我试图了解Java中的GC如何工作,并且我想知道在以下情况下会发生什么:

  1. Eden:几乎已满,Surivor1:利用率最低,Surivor2:空,已使用:几乎已满。

  2. 我们尝试分配一些对象,该对象不适合Eden的可用空间。

  3. GC启动:尝试将Eden + Survivor1重新打包为Survivor2。大多数对象已删除,但仍然没有足够的空间。溢出会尝试转到终身制。

  4. 租用地也没有足够的空间来容纳所有溢出物。

此时,在删除死对象之后,伊甸园可能已经有足够的空间。 Java GC可以利用此可用空间吗?

在这个问题上我没有考虑使用G1垃圾收集器。

1 个答案:

答案 0 :(得分:1)

在您描述的情况下,典型的GC算法(因为您不询问特定算法)会导致大型GC尝试回收旧一代中的空间(使用权空间)以允许从中提升对象伊甸园/幸存者空间。

如果这不能回收足够的空间来支持年轻一代的GC完成,您将获得OutOfMemoryException。