GC垃圾收集器

2021-07-01  本文已影响0人  云芈山人

垃圾算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。


HotSpot虚拟机的垃圾收集器.png

注:连续表示可以搭配使用。以下具体介绍几类垃圾回收器(HotSpot1.7为例)。

一、Serial垃圾收集器(单线程、复制算法)

二、ParNew垃圾收集器(Serial+多线程)

并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户线程继续运行,而垃圾收集程序运行于另一个CPU上。

三、Parallel Scavenge 收集器(多线程复制算法、高效)

吞吐量(Thoughput)
CPU用于运行用户代码的时间/CPU总消耗时间,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。
例如:虚拟机总共运行100分钟,垃圾收集时间为1分钟,那吞吐量为99%。

四、Serial Old收集器(单线程、标记-整理算法)

ParNew与Serial Old收集器运行过程 - 副本.png
Parallel Scavenge与Serial Old收集器运行过程.png

五、Parallel Old收集器(多线程,标记-整理算法)

六、CMS收集器(多线程、标记-清除算法)、

七、G1收集器

理解GC日志

例如如下两段典型的GC日志:

33.125: [GC [DefNew: 3324K->152K(3712K), 0.0025925 secs] 3324K->152K(11904K), 0.0031680 secs]

100.667: [Full GC [Tenured: 0K->210K(10240K), 0.0149142 secs] 4603K->210K(19456K), [Perm : 2999K->2999K(21248K)],0.0150007 secs] [Times: user=0.01 sys=0.00,real=0.02 secs]

垃圾收集器参数总结

UseSerial

虚拟机运行在Client模式下的默认值,打开此开关后,使用Serial+Serial Old的收集器组合进行内存回收。

UseParNewGC

打开此开关后,使用ParNew+Serial Old的收集器组合进行内存回收。

UseConcMarkSweepGC

打开此开关后,使用ParNew+CMS+Serial Old的收集器组合进行内存回收。Serial Old收集器作为CMS收集器出现Concurrent Mode Failure失败后的后备收集器使用。

UseParallelGC

虚拟机运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old(PS MarkSweep)的收集器组合进行内存回收。

UserParallelOldGC

打开此开关后,使用Parallel Scavenge + Parallel Old的收集器组合进行内存回收。

SurvivorRatio

新生代中 Eden区域与Survivor区域的容量比值,默认为8,代表Eden:Survivor=8:1

PretenureSizeThreshold

直接晋升到老年代的对象大小,设置这个参数后,大于这个参数的对象将直接在老年代分配。

MaxTenuringThreshold

晋升到老年代的对象年龄。每个对象在坚持过一次Minor GC之后,年龄就增加1,当超过这个参数值时就进入老年代。

UseAdaptiveSizePolicy

动态调整Java堆中各个区域的大小以及进入老年代的年龄。

HandlePromotiveFaliure

是否允许分配担保失败,即老年代的剩余空间不足以应付新生代的整个Eden和Survivor区的所有对象都存活的极端情况。

ParallelGCTreads

设置并行GC时进行内存回收的线程数。

GCTimeRatio

GC时间占总时间的比率,默认值为99,即允许1%的GC时间,仅在使用Parallel Scavenge收集器时生效。

MaxGCPauseMills

设置GC的最大停顿时间。仅在使用Parallel Scavenge收集器时生效。

CMSInitiatingOccupancyFraction

设置CMS收集器在老年代空间被使用多少后触发垃圾收集器,默认值为68%,仅在使用CMS收集器时生效。

UseCMSCompactAtFullCollection

设置CMS收集器在完成垃圾收集后是否进行一次内存碎片整理。仅在使用CMS收集器时生效。

CMSFullGCsBeforeCompaction

设置CMS收集器在进行若干次垃圾收集器后再启动一次内存碎片整理。仅在使用CMS收集器时生效。

上一篇 下一篇

猜你喜欢

热点阅读