小白学习JVM随笔③

JVM垃圾收集器

有哪些垃圾收集器

由于新生代和老年代的垃圾回收算法不同,所以垃圾回收器大体上可以按照新生代和老年代区分类。
新生代:Serial、ParNew、Parallel
老年代:Serial Old、Parallel Old、CMS
G1 G1可以不用配合其他收集器分别作用于新生代和老年代,所以这里不做分类。

Serial

Serial收集器 作用于新生代的单线程回收的收集器(串行收集器),使用的算法为复制算法。进行垃圾回收时会造成Stop-The-World。是JVM Client模式下的默认收集器。

ParNew

ParNew收集器 实际上就是Serial的多线程版。

Parallel

Parallel收集器 作用于新生代的并行收集器,采用复制算法。也叫做吞吐优先收集器,因为Parallel十分注重吞吐量。吞吐量,即程序运行时间/程序运行时间+垃圾回收时间。假如程序运行时间为99,垃圾回收时间为1.那么吞吐量即为99%。
Parallel有几个重要的参数
-XX:GCTimeRatio参数
该参数设置可以通过改变垃圾收集时间占比来改统吞吐量,若设置为99则垃圾收集时间占比为1/(1+99)即为1%
-XX:MaxGCPauseMillis参数
该参数一般设置一个大于0的毫秒数。收集器会尽可能的保证垃圾回收所停顿时间不超过设定值。但该参数并不是越小越好。因为降低垃圾回收停顿时间的代价是牺牲吞吐量和新生代空间。

-XX:+UseAdaptiveSizePolicy
叫做自适应策略,开启该参数后会自动分配内存,自动设置-XX:SurvivorRatio(设置Eden 和from/to的占比),还会自动调节-XX:GCTimeRatio参数和晋升老年代的年龄参数(-XX:PretenureSizeThreshold)以达到最优吞吐量。

Serial Old

Serial Old既是Serial的老年版,作用于老年代。采用标记整理算法。

Parallel Old

Parallel的老年版,标记整理算法

CMS

CMS(ConcurrentMarkSweep) 作用于老年代,采用标记清除算法,也叫做响应优先收集器。因为该收集器比较注重垃圾收集的停顿时间。该收集器的工作过程大体上可以总结为:初始标记、并发标记、重新标记、并发清除。其中初始标记及重新标记会造成Stop-The-World。
CMS无法清除浮动垃圾。浮动垃圾,在CMS进行并发清除时,程序仍在运行。这时产生的垃圾不能被清理,只能下次GC时被清理。这种就叫做浮动垃圾。
CMS也有几个重要的参数
-XX:CMSInitiatingOccupancyFraction
设置老年代内存使用阈值,由于并发标记阶段还要留一部分空间给其它线程。所以不能像其他收集器一样等到内存不够用时再去GC。当老年代使用率超过这个阈值即会触发一次GC。
-XX:+UseCMSCompactAtFullCollection
由于CMS采用的是标记清理算法,所以会造成空间碎片。而空间碎片多了,会造成老年代还有很多空间,缺找不到一块连续的能够储存一个相对较大的对象的空间。就会造成FullGC。该参数可以这种情况下进行碎片的合并整理。尽量避免FullGC。但会导致停顿时间的增加。
-XX:CMSFullGCsBeforeCompaction
该参数可以设置在经历几次不压缩的FullGC之后进行一次空间压缩,默认为0,即每次FullGC都压缩。

G1

G1收集器不用配合其他收集器,相比较于CMS,G1基于标记整理算法不会产生空间碎片。同时G1收集器最大的特点是使用G1时内存空间并不是连续的。而是分为大小相等的Region。若遇到大对象,则会寻找几个连续的Region去储存。

未完待续(如有错误的地方,请各位大佬批评指正,同时感谢陈树义大佬分享的学习资料)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值