作为java的一部分,JDK10实现了JEP307。
我试着理解它的描述,但我仍然不相信我有正确的想法。
我怀疑它与并发垃圾有关吗?
发布于 2018-05-05 11:10:16
作为一个简单的解释-垃圾收集器有两种可能的收集类型,“增量”和“完全”。增量收集是这两种方法中最好的一种,因为它会经常做一些工作。完整的集合通常更具有破坏性,因为它需要更长的时间,并且在运行过程中不得不停止整个程序的执行。
正因为如此,大多数现代GC(包括G1)通常都会试图确保在正常情况下,增量收集就足够了,并且永远不需要完整的集合。但是,如果不同代的许多对象都有资格以不可预测的方式进行垃圾收集,那么偶尔会出现一个完整的GC。
目前,G1完整的集合实现仅是单线程的。这就是JEP的作用所在--它的目标是并行化它,这样当一个完整的GC出现时,它在能够支持并行执行的系统上会更快。
发布于 2018-05-07 10:58:18
最后,我理解了G1的并行完整GC。

在JDK 9中设置默认值,并在JDK 7中引入
在完全垃圾收集中,高效并发地处理堆会失败,有时完全垃圾收集是inevitable.It的,同时处理非常大的堆,正常的GC会将堆划分为年轻的(eden和survivor)和老一代(逻辑分离)的G1,将堆划分成许多小区域。这种分割使G1能够选择一个小区域来快速收集和完成。
在JDK9中,使用单个线程实现完整的GC。
在JDK中,10使用多线程(并行)进行垃圾收集
发布于 2018-05-08 06:17:31
G1垃圾收集器因执行单线程完整GC循环而臭名昭著。当你需要所有你可以收集的硬件来寻找未使用的对象时,我们在一个线程上遇到了瓶颈。在Java 10中,他们修复了这个问题。完整的GC现在与我们抛出的所有资源一起运行。为了演示这一点,我编写了ObjectChurner,它创建了一系列不同大小的字节数组。它把物体固定了一段时间。大小是随机的,但以一种控制的,可重复的方式。
https://stackoverflow.com/questions/50185681
复制相似问题