首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么G1垃圾收集器被称为“垃圾优先”?

为什么G1垃圾收集器被称为“垃圾优先”?
EN

Stack Overflow用户
提问于 2019-02-05 14:16:06
回答 2查看 259关注 0票数 2

当我读甲骨文的关于G1垃圾收集器的文档时,我注意到-

在执行垃圾回收时,G1的操作方式类似于CMS收集器。G1执行一个并发的全局标记阶段,以确定整个堆中对象的活性。在标记阶段完成后,G1知道哪些区域大部分是空的。它首先聚集在这些地区,通常产生大量的自由空间。这就是为什么这种垃圾收集方法称为“垃圾优先”()。

如前所述,G1选择大部分为空的区域。

我的问题是,如果任何区域都是空的,那怎么会产生大量的空闲内存呢?如果它大部分是空的,那么它已经是空闲内存的一部分。不是吗?

这里有人能帮我澄清一下吗?

EN

回答 2

Stack Overflow用户

发布于 2019-02-05 23:51:25

在这个句子中:

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

“大多是空的”意思是“包含最可回收的垃圾”。从上下文中可以清楚地看到这一点。标记阶段的目的是确定哪些对象是绝对可触及的,或者可能是可达的。其余的绝对是不可及的,可以收集。

收集面积最大的区域是好的,原因有二:

  1. 你很快就能得到最多的空间。
  2. 对于复制收集器,如果"from“空间主要包含不需要复制到" to”空间的内容,则要做的工作就更少了。这样你就能有效地收回最大的空间。

在大多数用例中,第二个原因更有意义。快速恢复空间是很少重要的。当应用程序请求时,您只需要可用的空间。(GC暂停是另一回事,但它们是由其他原因引起的。)

票数 2
EN

Stack Overflow用户

发布于 2019-02-05 23:45:24

把“垃圾第一”看作是“大多数垃圾优先”的缩写。也就是说,它定义了各种记忆块,然后对垃圾最多的记忆进行排序--从而得到最大的回报。

从你引用的那一页:

G1将其收集和压缩活动集中在堆中可能充满可回收对象的区域(即垃圾)上。(强调后加)

..。而不是仅仅把每一块内存当作对GC有利的东西,即使99%的内存包含活动对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54536378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档