首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G1所需的并行全GC解释

G1所需的并行全GC解释
EN

Stack Overflow用户
提问于 2018-05-05 04:22:49
回答 6查看 3.5K关注 0票数 15

作为java的一部分,JDK10实现了JEP307。

我试着理解它的描述,但我仍然不相信我有正确的想法。

我怀疑它与并发垃圾有关吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-05-05 11:10:16

作为一个简单的解释-垃圾收集器有两种可能的收集类型,“增量”和“完全”。增量收集是这两种方法中最好的一种,因为它会经常做一些工作。完整的集合通常更具有破坏性,因为它需要更长的时间,并且在运行过程中不得不停止整个程序的执行。

正因为如此,大多数现代GC(包括G1)通常都会试图确保在正常情况下,增量收集就足够了,并且永远不需要完整的集合。但是,如果不同代的许多对象都有资格以不可预测的方式进行垃圾收集,那么偶尔会出现一个完整的GC。

目前,G1完整的集合实现仅是单线程的。这就是JEP的作用所在--它的目标是并行化它,这样当一个完整的GC出现时,它在能够支持并行执行的系统上会更快。

票数 12
EN

Stack Overflow用户

发布于 2018-05-07 10:58:18

最后,我理解了G1的并行完整GC。

在JDK 9中设置默认值,并在JDK 7中引入

在完全垃圾收集中,高效并发地处理堆会失败,有时完全垃圾收集是inevitable.It的,同时处理非常大的堆,正常的GC会将堆划分为年轻的(eden和survivor)和老一代(逻辑分离)的G1,将堆划分成许多小区域。这种分割使G1能够选择一个小区域来快速收集和完成。

在JDK9中,使用单个线程实现完整的GC。

在JDK中,10使用多线程(并行)进行垃圾收集

票数 6
EN

Stack Overflow用户

发布于 2018-05-08 06:17:31

G1垃圾收集器因执行单线程完整GC循环而臭名昭著。当你需要所有你可以收集的硬件来寻找未使用的对象时,我们在一个线程上遇到了瓶颈。在Java 10中,他们修复了这个问题。完整的GC现在与我们抛出的所有资源一起运行。为了演示这一点,我编写了ObjectChurner,它创建了一系列不同大小的字节数组。它把物体固定了一段时间。大小是随机的,但以一种控制的,可重复的方式。

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

https://stackoverflow.com/questions/50185681

复制
相关文章

相似问题

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