一 G1垃圾收集器的优点

与其他 GC 收集器相比,G1 使用了全新的分区算法,其特点如下所示:

1 并行与并发

并行性:G1 在回收期间,可以有多个 GC 线程同时工作,有效利用多核计算能力。此时用户线程 STW。
并发性:G1 拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况。

2 分代收集

  • 从分代上看,G1 依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有 Eden 区和 Survivor 区。但从堆的结构上看,它不要求整个 Eden 区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。
  • 将堆空间分为若干个区域(Region),这些区域中包含了逻辑上的年轻代和老年代。
  • 和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代。

G1 所谓的分代,已经不是下面这样的了

而是这样的一个区域

3 空间整合

  • CMS:使用的是“标记-清除”算法、存在内存碎片、若干次 GC 后进行一次碎片整理。
  • G1 将内存划分为一个个的 region。内存的回收是以 region 作为基本单位的。Region之间是复制算法,但整体上实际可看作是标记-压缩(Mark-Compact)算法,两种算法都可以避免内存碎片。这种特性有利于程序长时间运行,分配大对象时不会因为无法找到连续内存空间而提前触发下一次 GC。尤其是当 Java 堆非常大的时候,G1 的优势更加明显。

4 可预测的停顿时间模型(即:软实时 soft real-time)

这是 G1 相对于 CMS 的另一大优势,G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为 M 毫秒的时间片段内,消耗在垃圾收集上的时间不得超过 N 毫秒。
  • 由于分区的原因,G1 可以只选取部分区域进行内存回收,这样缩小了回收的范围,因此对于全局停顿情况的发生也能得到较好的控制。
  • G1 跟踪各个 Region 里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。保证了 G1 收集器在有限的时间内可以获取尽可能高的收集效率。
  • 相比于 CMS GC,G1 未必能做到 CMS 在最好情况下的延时停顿,但是最差情况要好很多。

二 G1垃圾收集器的缺点

相较于 CMS,G1 还不具备全方位、压倒性优势。比如在用户程序运行过程中,G1 无论是为了垃圾收集产生的内存占用(Footprint)还是程序运行时的额外执行负载(overload)都要比 CMS 要高。
从经验上来说,在小内存应用上 CMS 的表现大概率会优于G1,而 G1 在大内存应用上则发挥其优势。平衡点在 6-8GB 之间。

G1垃圾收集器的优点和缺点相关推荐

  1. 简单理解CMS与G1垃圾收集器

    随着垃圾收集器不断的完善,中间产生了多种垃圾收集器,从最早的Serial收集器到现在的ZGC,Shenandoah GC收集器.这些垃圾收集器其最终的目的是为了能够缩短STW(Stop the Wor ...

  2. 转:深入理解Java G1垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  3. 深入理解 Java G1 垃圾收集器--转

    原文地址:http://blog.jobbole.com/109170/?utm_source=hao.jobbole.com&utm_medium=relatedArticle 本文首先简单 ...

  4. 深入理解 Java G1 垃圾收集器

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  5. G1 垃圾收集器原理详解

    一.G1 垃圾收集器的开发背景: 1.CMS 垃圾收集器的缺陷: JVM 团队设计出 G1 收集器的目的就是取代 CMS 收集器,因为 CMS 收集器在很多场景下存在诸多问题,缺陷暴露无遗,具体如下: ...

  6. GC之G1垃圾收集器

    GC之G1垃圾收集器 目录 以前收集器的特点 G1是什么 G1特点 G1底层原理 G1回收步骤 和CMS相比的优势 小总结 1. 以前收集器的特点 年轻代和老年代是各自独立且连续的内存块 年轻代收集必 ...

  7. JVM性能调优实践:G1 垃圾收集器介绍篇

    前言 前面两篇主要整理了性能测试的主要观察指标信息:性能测试篇,以及JVM性能调优的工具:JVM篇.这一篇先简单总结一下GC的种类,然后侧重总结下G1(Garbage-First)垃圾收集器的分代,结 ...

  8. 深入理解 Java G1 垃圾收集器GC调优

    本文首先简单介绍了垃圾收集的常见方式,然后再分析了G1收集器的收集原理,相比其他垃圾收集器的优势,最后给出了一些调优实践. 一,什么是垃圾回收 首先,在了解G1之前,我们需要清楚的知道,垃圾回收是什么 ...

  9. G1垃圾收集器设计目标与改良手段【纯理论】

    在之前已经详细对CMS垃圾回收器进行了学习,今天准备要学习另一个全新的垃圾收集器---G1(Garbage First Collector 垃圾优先的收集器),说是一种全新的,其实G1垃圾收集器已经出 ...

最新文章

  1. 今天,向 6 女性程序员先驱致敬
  2. Stream Processing:滑动窗口的聚集(aggregation)操作的优化算法讲解
  3. AI让硬件说话,这就是未来物联网
  4. myeclispse配置自己的jdk和tomcat
  5. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
  6. 【已解决】TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘_Python系列学习笔记
  7. 电脑连接电视方法详解_电脑如何连网?——校园宽带的连接方法(详解版)
  8. 日期时间格式之间的相互转换
  9. 华为透露中国首个开源基金会将于近期正式运营!
  10. Python中的分片和索引方法
  11. SpringMvc 文件上传后台处理
  12. Nginx打包RPM(FPM工具)
  13. ps无法加载扩展未经正确签署解决方法
  14. MySQL2:代码小节和代码测试
  15. uefiboot 文件_UEFI下win系统启动过程及用bcdboot命令如何修复引导启动
  16. arduino简易电子琴
  17. 大话functional编程语言
  18. Computer composition and design work04 ——fifth verson
  19. MFC简易RTF编辑器
  20. aosp_015.配置编译文件,删除自带app

热门文章

  1. 线刷一加5t android 9,11万条评价0差评,一加5T为什么这么牛?
  2. vue H5、uniapp小程序的文件下载
  3. c++中list、vector、map 、set区别
  4. 数据分析中如何清洗数据?
  5. 带你了解STM32中断系统
  6. [oeasy]python0128_unicode_字符集_character_set_八卦_星座
  7. SSE和WebSocket
  8. Android所有小部件列表页面,伟大的Android时钟小部件列表,以帮助您了解时间 | MOS86...
  9. 2021年P气瓶充装考试试卷及P气瓶充装模拟考试题库
  10. java+cas实现类_像宝石一样的Java原子类-基于CAS实现