深入理解Java虚拟机之G1收集器

G1是一款面向服务端应用的垃圾收集器,HotSpot团队赋予它的使命是未来可以替换掉CMS收集器,G1收集器的特点:

  • 并行与并发:G1可以充分利用多CPU,多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿的时间,部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让Java程序继续执行
  • 分代收集:虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但它能够采用不同的方式去处理新创建的对象和已经存活了一段时间的对象,熬过多次GC的旧对象以获得更好的收集效果
  • 空间整合:G1在整体上采用标记-整理算法,局部采用复制算法,使得它在运行期间不会产生内存空间碎片,收集后能提供规整的可用内存,这种特性有利于程序长时间运行,分配大对象的时候不会因为无法找到连续内存空间而提前触发下一次GC
  • 可预测的停顿:这是CMS的另一大优势,G1除了追求低停顿外,还能建立可预测的停顿时间模型

1 G1收集器将整个Java堆划分为多个大小相等的独立区域,虽然还保留有新生代和老年代的概念,但它们已经不再是物理隔离了,它们是一部分不需要连续的集合

2 G1收集器之所以能够建立可预测的停顿时间模型,是因为它可以有计划地避免在整个Java堆中进行全区域的垃圾收集。

3 G1收集器的运作步骤:(前两步与CMS收集器前两步一样)

  • 初始标记:仅仅只是标记一下GC Roots能够直接关联到的对象,并且修改TAMS的值,让下一阶段用户程序并发运行时,能在正确可用的Region中创建新对象,这一阶段需要停顿线程,但耗时很短
  • 并发标记:从GC Root开始对堆中的对象进行可达性分析,找出存活的对象,这一阶段耗时较长,但可与用户程序并发执行
  • 最终标记:为了修正在并发标记期间因用户程序继续运作而导致标记产生变化的那一部分标记记录,可并行执行
  • 筛选回收:该阶段可以做到与用户程序一起并发执行

 

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/wo8vqj68/article/details/81268488
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞