【问题标题】:Why do we need 3 areas in Young Generation for Garbage Collection?为什么我们在年轻一代中需要 3 个区域来进行垃圾收集?
【发布时间】:2018-04-17 03:47:01
【问题描述】:

我知道young generation分为Eden、From、To区域。 但是谁能向我解释,如果我们只有 2 个区域,比如第 1 个区域,第 2 个区域,那可以吗?

我认为我们仍然可以只复制 2 个区域的垃圾收集,如下所示。

  1. 新对象来了 => 将它们放在第一个
  2. 当第一个已满时,将活的复制到第二个并在第一个删除所有
  3. 新对象又来了 => 将它们放在第二个
  4. 当 2nd 已满时,将 live 复制到 1st 并在 2nd 删除它们 等等

那么,为什么我们甚至需要一个额外的(伊甸园)区域?

这对性能更好吗? 提前致谢。

【问题讨论】:

  • 您不需要任何个单独的区域。经验表明,拥有三个可为大多数实际用途提供最佳性能。
  • 我知道这 3 个领域是好的,因为它正在全球范围内使用。我只是想知道原因。
  • 因为大多数对象几乎立即被丢弃,因此将长期存在的对象隔离在自己的区域中以尽量减少复制的需要是有意义的。
  • 我认为这就是将Heap分为Young和Old的目的。我不明白的是,此外,将Young分为3个区域。

标签: java garbage-collection jvm


【解决方案1】:

在你的scheme中,对象不能占用超过一半的Young Gen,所以总是浪费50%的Young Gen内存。

Separate To 和 From 空间通常比 Eden 小。这有助于减少内存开销,同时保留快速复制收集器的优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-26
    • 2020-05-29
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多