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。如果是单核CPUSerial收集器更佳。
算法:复制算法。

CMS收集器(-XX:+UseConcMarkSweepGC(old))STW时间段,体验好。只有初始标记和重新标记会发生stw。CMS只能与Serial和ParNew配合使用。

STW),并记录下gc roots直接能引用的对象,速度很快。GC Roots的直接关联对象开始遍历整个对象图的过程。这个过程很长但不需要停顿用户线程,可以与垃圾收集线程一起并发运行。因为用户程序继续运行,可能会有可能导致已经标记过的对象状态发生改变。GC线程开始对未标记的区域做清除。GC过程种的标记数据。CMS收集器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使用,
它是HotSpot虚拟机第一款真正意义上的并发收集器。它地磁实现了让垃圾收集线程与用户线程(基本
上)同时工作。