jvm 垃圾收集器


jvm 垃圾收集器

 

               

说明:ParNew已经在java10中移除,CMS在java 14开始已经移除,默认使用G1垃圾收集器

 

 

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

新生代垃圾收集器

 

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

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

 

        

 

相关参数

-XX:+UseSerialGC:使用serial + serial old进行垃圾收集

 

 

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

ParNew:垃圾回收时可以有多条垃圾回收线程,用户线程停止运行,java10中已经移除

 

               

 

 

相关参数:

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

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

注意:The option -XX:+UseParNewGC was deprecated in JDK 9 and should be removed in JDK 10

 

 

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

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

 

              

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

 

相关参数:

-XX:+UseParallelGC:Parallel Scavenge + Parallel Old

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

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

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

 

 

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

老年代收集器

 

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

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

 

                

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

 

 

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

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

 

                

说明:在注重吞吐量的场合,可使用Parallel Scavenge + Parallel Old的组合

 

相关参数

-XX:+UseParallelGC :Parallel Scavenge + Parallel Old

-XX:+UseParallelOldGC:Parallel Scavenge + Parallel Old

 

-XX:+UseParallelOldGC在 java 15中已经移除

#java 14
Java HotSpot(TM) 64-Bit Server VM warning: Option UseParallelOldGC was deprecated in 
version 14.0 and will likely be removed in a future release.
[0.025s][info][gc,heap,coops] Heap address: 0x0000000081c00000, size: 2020 MB, Compressed 
Oops mode: 32-bit
[0.026s][info][gc           ] Using Parallel


#java 15
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseParallelOldGC; support was 
removed in 15.0
[0.031s][info][gc] Using G1
[0.034s][info][gc,init] Version: 15+36-1562 (release)

 

 

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

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

 

 

              

 

java 14已经移除,忽略该参数,默认使用G1

Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option UseConcMarkSweepGC; 
support was removed in 14.0

 

特点:

并发清除阶段用户线程可同时工作,有可能会产生浮动垃圾,若没有回收到足够的内存(出现Concurrent Mode failure),会启用Serial Old垃圾收集器进行垃圾回收;

使用标记清除算法会产生空间碎片,可使用参数-XX:+CMSFullGCsBeforeCompaction设置执行多少次不压缩的full gc后,使用带压缩的full gc(默认每次full gc都会使用compaction)

 

运行步骤:

初始标记:枚举根节点

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

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

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

 

 

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

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

 

               

 

特点:

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

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

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

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

 

运行步骤:

初始标记:枚举根节点

并发标记:根据根节点进行可达性分析,标记可回收对象

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

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

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值