JVM
之垃圾回收器学习(一)cpu
的话就是交替执行)。CPU
用于运行用户代码的时间与CPU
总消耗时间的比值(吞吐量=运行用户代码时间/(总时间)),例如虚拟机运行100分钟,垃圾回收占用1分钟,那么吞吐量就是99%。(-XX:+UseSerialGC -XX:+UseSerialOldGC)
STW
:体验差。CPU
。
Serial(串行)收集器是最基本的、历史最悠久的垃圾收集器。它的单线程意义不仅仅意味着
它只会使用一条垃圾收集线程去完成垃圾回收工具。更重要的是它在进行垃圾收集工作的时候
必须暂停其它所有的工作线程,直到它收集完成。
(-XX:+UseParallelGC,XX:+UseParallelOldGC)
优点:吞吐量高
缺点:体验差,有STW
算法:新生代采用复制算法,老年代采用标记整理算法
参数
-XX:GCTimeRatio
:设置GC
的执行频率。
-XX:MaxGCPauseMills
:设置STW
机制的暂停时间阈值。
-XX:UseAdaptiveSizePolicy
:GC
自适应策略开关,开启后,年轻代Eden和Survivor的比例、晋升老年代的年龄等参数会自动调整。
-XX:ParallelGCThreads
:设置垃圾回收时线程的数量。当cpu
数量小于8个,ParallelGCThreads
的值等于cpu
数量。当cpu
数目大于8个的时候,ParallelGCThreads
的值设置为3+[5*cpu_count]/8
。
parallel其实就是serial收集器的多线程版本,默认收集线程数跟cpu一样,使用标记整理算法,
JDK8默认使用该收集器,垃圾回收过程会集中回收垃圾,会stw,与cms有很大区别。
优点:并行垃圾收集,多线程收集垃圾,效率高。可以与CMS
收集器配合使用。
缺点:体验差,会STW
。如果是单核CPU
Serial收集器更佳。
算法:复制算法。
CMS
收集器(-XX:+UseConcMarkSweepGC(old))
STW
时间段,体验好。只有初始标记和重新标记会发生stw
。CMS
只能与Serial
和ParNew
配合使用。
STW
),并记录下gc roots
直接能引用的对象,速度很快。GC Roots
的直接关联对象开始遍历整个对象图的过程。这个过程很长但不需要停顿用户线程,可以与垃圾收集线程一起并发运行。因为用户程序继续运行,可能会有可能导致已经标记过的对象状态发生改变。GC
线程开始对未标记的区域做清除。GC
过程种的标记数据。CMS收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用,
它是HotSpot虚拟机第一款真正意义上的并发收集器。它地磁实现了让垃圾收集线程与用户线程(基本
上)同时工作。