jvm 垃圾收集器

 

               jvm 垃圾收集器

 

*******************************************************************************

新生代垃圾收集器

 

Serial:垃圾回收时使用一条垃圾回收线程,用户线程停止运行

虚拟机运行在clinent模式下默认的新生代收集器

        jvm 垃圾收集器

 

ParNew:垃圾回收时可以有多条垃圾回收线程,用户线程停止运行

相关参数:

-XX:UseParNewGC:使用该参数强制指定使用ParNew垃圾收集器

-XX:UseConcMarkSweepGC:老年代使用CMS收集器时,新生代默认使用ParNew收集器

       jvm 垃圾收集器

 

Parallel Scanvenge:吞吐量优先的垃圾收集器,垃圾回收时,多条垃圾回收线程同时工作

吞吐量:用户线程运行时间/(用户线程运行时间+垃圾回收线程运行时间)

相关参数:

-XX:MaxGCPauseMillis:设置最大垃圾回收时间

-XX:GCTimeRatio:设置吞吐量,默认为99,及最大允许1/(1+99)=1%的垃圾回收时间

-XX:UseAdaptiveSizePolicy:自适应的调节策略,设置好MaxGCPauseMillis或者GCTimeRatio后,垃圾收集器会自动调节其余参数

              jvm 垃圾收集器

 

***********************************************************************************

老年代收集器

 

Serial Old:垃圾回收是只有一条垃圾回收线程,用户线程停止

可作为使用CMS垃圾收集器Concurrent Mode failue时使用

                jvm 垃圾收集器

 

Parallel Old:Parallel Scavenge对应的老年代收集器

在注重吞吐量的场合,可以使用Parallel Scavenge 加Parallel Old的组合

                jvm 垃圾收集器

 

CMS:并发收集器,垃圾回收是可以和用户线程一起工作

运行步骤:

初始标记:枚举根节点

并发标记:根据根节点追踪,标记可回收对象

重新标记:修改并发标记阶段引用关系发生变化的对象

并发清除:清除可回收对象

特点:使用标记清除算法,会产生浮动垃圾,若垃圾回收后没有足够的内存,则会出现Concurrent Mode failure,会启用Serial Old垃圾收集器进行垃圾回收;此外,使用标记清除算法,也会产生空间碎片,可使用参数-XX:CMSFullGCsBeforeCompaction设置执行多少次不压缩的full gc后,使用带压缩的full gc(默认每次full gc都会使用compaction)

注意:CMS在java9中已经不推荐使用,未来可能要移除

Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.

              jvm 垃圾收集器

 

G1:并发收集器,垃圾回收线程可以和用户线程一起运行

特点:

保留分代概念,将堆内存划分为多个region,垃圾回收范围发生在整个堆内存;

整体使用标记整理算法、局部标记复制算法,不会产生内存碎片;

维护优先级队列,优先回收回收价值较大的region(回收价值考虑回收内存空间与回收时间)

使用remember set记录region之间对象的引用关系

运行步骤

初始标记:枚举根节点

并发标记:根据根节点追踪可回收对象

最终标记:标记并发标记阶段引用关系发生变化的对象

筛选回收:筛选回收价值较大的region

               jvm 垃圾收集器

相关文章:

  • 2021-04-22
  • 2021-10-18
猜你喜欢
  • 2021-08-04
  • 2021-05-19
  • 2022-01-06
  • 2021-12-11
  • 2021-04-23
  • 2021-04-03
相关资源
相似解决方案