【问题标题】:Is Minor GC also performed on Survivor spaces along with Eden space?Minor GC 是否也与 Eden 空间一起在 Survivor 空间上执行?
【发布时间】:2016-06-14 09:41:52
【问题描述】:

据我了解,Minor GC 是在年轻一代的伊甸园空间中执行的。在 GC 中幸存的对象,移动到幸存者空间(From)。一旦,(From)空间不足,对象将移动到幸存者空间(To)。 Minor GC 是否也在 Survivor 空间上执行?

【问题讨论】:

标签: java garbage-collection


【解决方案1】:

幸存者空间是年轻代的一部分,因此将在幸存者空间上执行次要 gc。如果一个对象在若干次次要 gc 中存活下来,那么它将被移到老年代。

更多详情:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/

【讨论】:

  • 我之前浏览了cubrid博客。然而,以下几点让我感到困惑 - 1. 在 Eden 空间中进行一次 GC 后,幸存的对象被移动到 Survivor 空间之一。 2. Eden 空间中的 GC 之后,对象被堆积到 Survivor 空间中,这里已经存在其他幸存的对象。
    它说,一旦一个幸存者空间已满,幸存的对象就会被移动到另一个幸存者空间。然后,已满的 Survivor 空间将变为完全没有数据的状态。 />在Survivor空间执行minor GC时
  • Minor GC 将始终在 eden 和进程中执行,将活动对象移动到幸存者。在本次 Minor GC 期间,如果幸存者空间(From)已满,则幸存者空间(From)将与其他幸存者空间(To)交换。
  • 当我们说“swapped”时——这是否意味着一旦 (From) 已满,次要 GC 将在 Eden 和 (From) 中运行,并且 (From) 中的幸存对象将与 (到)?
  • 对不起,我不清楚。在 2 个幸存者空间 FROM 和 TO 中,TO 将始终为空。当 FROM 幸存者空间已满时,次要 GC 将在将活动对象移动到 TO 时检查是否有任何死对象。这种在幸存者空间上收集和交换的过程可能会发生多次,然后将幸存的对象移动到永久空间。
【解决方案2】:

从内存分配开始会发生以下动作:

让我们假设两个幸存者空间为 X,Y 以避免混淆

  1. 第一次启动应用程序时,创建的对象被移动到 Eden 空间。此时 X、Y 为空。
  2. 当 Eden 空间已满时,会在 Eden 空间中进行次要 GC,并将活动对象发送到 X 幸存者空间。在这个阶段,X 有对象,但 Y 是空的。
  3. 当下一次次要 GC 发生时,它发生在 Eden 以及 X Survivor 空间,剩余的存活对象被发送到 Y savior 空间。在这个阶段 X 是空的,但 Y 有活的对象。

所以每次重复这些步骤时,您可以参考link 以获得更好的理解,从上面的解释来看,minor GC 也确实发生在幸存者空间中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多