虽然我读甲骨文documentation on G1 Garbage Collector,我注意到以下 -
当执行垃圾收集,G1以类似于在CMS集电极的方式。 G1进行全球同步标记阶段,以确定整个堆上对象的活跃度。标记阶段完成后,G1知道哪些区域大部分是空的。它收集在这些区域中的第一,这通常会产生大量的自由空间。这就是为什么垃圾收集这种方法被称为垃圾第一
如在上面提到的报价,G1选择基本都是空的区域。
我的问题是,如果任何区域大部分是空的,怎么会是产生大量的可用内存?如果大部分是空的,这已经是空闲内存的一部分。难道不是吗?
可以在这里谁能帮我澄清这一点?
在这样的句子:
标记阶段完成后,G1知道哪些区域大部分是空的。
“大部分是空的”的意思是“包含最可回收垃圾”。这是从上下文中清楚。标记阶段的目的是确定哪些对象肯定或可能到达。其余的都是绝对无法访问,并且可以被收集。
收集地区拥有的可回收空间量最大的是良好的,原因有二:
在大多数使用情况,第二个原因是更显著。让空间快速反击是很少重要。你只需要空间,当应用程序请求可用。 (GC暂停是一个不同的问题,但他们都被其他东西所引起的。)
想想的“垃圾第一”作为速记“最垃圾-y个第一。”也就是说,它定义的回忆各种块,然后用优先最垃圾的 - 从而得到其最大收益。
从页面引用您:
G1集中在有可能成为全可回收物品堆的地方,那就是垃圾其收藏和压实活动。 (强调)
...而不是仅仅治疗的内存同样良好的GC每个块,即使是99%的含有活的对象。