一、优点二、缺点
G1使用的是分区算法(分代收集算法是将堆按照对象的生命周期划分为不同的区间;分区算法是将整个堆划分成若干个小区间。每一个小区间都独立使用,独立回收。)详细可看博客:
增量收集算法与分区算法.
仍然分为年轻代、老年代,但是他不再像之前的六种经典回收器那样内存连续,G1中的分代内存是不连续的:
由于G1中Region之间使用标记-复制和标记-压缩算法,所以可以避免内存碎片的情况。
可预测停顿时间模型的意思是:能够支持指定在一个长度为M毫秒的时间片段内,消耗在垃圾回收的时间大概率不超过N毫秒。也就是说程序员可以去限制其暂停时间。这种思想其实是基于region分区的设计,G1可以最大利益收集垃圾。 二、缺点
分区算法有他的优点,同时也带来了缺点——Region间的跨引用,解决这样的跨引用问题,会造成G1至少消耗大约相当于Java堆容量的10%-20%的额外内存。G1在大内存上有优秀的表现,但是在小内存上表现不如CMS。G1收集过程大致分为初始标记、并发标记、最终标记、筛选回收,相比于CMS收集器,G1只在并发标记时可与用户线程并发执行,所以在低延迟方面不如CMS。(ZGC补偿了这一点)
参考资料:
1、 尚硅谷JVM全套视频.
2、《深入理解Java虚拟机》周志明



