为什么G1垃圾收集器被称为“垃圾第一”?

问题描述 投票:2回答:2

虽然我读甲骨文documentation on G1 Garbage Collector,我注意到以下 -

当执行垃圾收集,G1以类似于在CMS集电极的方式。 G1进行全球同步标记阶段,以确定整个堆上对象的活跃度。标记阶段完成后,G1知道哪些区域大部分是空的。它收集在这些区域中的第一,这通常会产生大量的自由空间。这就是为什么垃圾收集这种方法被称为垃圾第一

如在上面提到的报价,G1选择基本都是空的区域。

我的问题是,如果任何区域大部分是空的,怎么会是产生大量的可用内存?如果大部分是空的,这已经是空闲内存的一部分。难道不是吗?

可以在这里谁能帮我澄清这一点?

java garbage-collection
2个回答
2
投票

在这样的句子:

标记阶段完成后,G1知道哪些区域大部分是空的。

“大部分是空的”的意思是“包含最可回收垃圾”。这是从上下文中清楚。标记阶段的目的是确定哪些对象肯定或可能到达。其余的都是绝对无法访问,并且可以被收集。

收集地区拥有的可回收空间量最大的是良好的,原因有二:

  1. 您得到最后排空间最快。
  2. 随着复制收集器,有较少的工作做,如果“从”空间大多含有的东西,你不需要复制到“到”空间。所以,你得到最后排空间有效。

在大多数使用情况,第二个原因是更显著。让空间快速反击是很少重要。你只需要空间,当应用程序请求可用。 (GC暂停是一个不同的问题,但他们都被其他东西所引起的。)


0
投票

想想的“垃圾第一”作为速记“最垃圾-y个第一。”也就是说,它定义的回忆各种块,然后用优先最垃圾的 - 从而得到其最大收益。

从页面引用您:

G1集中在有可能成为全可回收物品堆的地方,那就是垃圾其收藏和压实活动。 (强调)

...而不是仅仅治疗的内存同样良好的GC每个块,即使是99%的含有活的对象。

© www.soinside.com 2019 - 2024. All rights reserved.