垃圾回收器

一.垃圾回收器的分类:

二.GC性能指标:
(1).吞吐量:
(2).垃圾收集开销:
(3).暂停时间:
(4).收集频率:
(5).内存占用:
(6).快速:

三.吞吐量和停顿时间:

四.不同的垃圾回收器有哪些:

面试问题:Java常见的垃圾回收器有哪些?
回答思路:实际上垃圾回收器根具体的JVM是紧密相连的,像不同的厂商,像Oracle,像IBM,像Redhat也好实际上会考虑不同版本的JVM,不同版本的JVM就可以考虑使用不同版本的垃圾回收器,主流的垃圾回收器主要有:

五.七款经典的垃圾回收器:

六.七款经典的垃圾收集器与垃圾分代之间的关系:
(1).新生代垃圾收集器:
(2).老年代垃圾收集器:
(3).整体垃圾收集器:

七.垃圾收集器的组合关系:

八.如何查看默认的垃圾回收器:
-XX:+PrintCommandLineFlags
jps ==> jinfo -flag UseParallelGC 3556

九.Serial回收器(串行回收):
(1).特点:单线程垃圾回收,Serial作用于新生代垃圾收集,使用的是复制算法;Serial Old作用于老年代垃圾收集,使用的是标记压缩算法
(2).优势:
(3).使用:-XX:+UseSerialGC
(4).使用的算法:
(5).垃圾回收器组合:

十.ParNew回收器(并行回收):
(1).特点:
(2).使用:
(3).使用的算法:
(4).垃圾回收器组合:

十一.Parallel Scavenge回收器(吞吐量优先):
(1).
(5).垃圾回收器组合:

十二.Parallel Scavenge回收器参数配置:
-XX:+UseParallelGC; -XX:+UseParallelOldGC
-XX:MaxGCPauseMillis;(设置垃圾回收器的最大停顿时间,即STW时间,单位毫秒)
-XX:GCTimeRatio;(垃圾收集时间占总时间的比例,取值范围(0,100),默认值99)
-XX:+UseAdaptiveSizePolicy;(设置Parallel Scavenge收集器具有自适应调节策略)

十三.CMS回收器(低延迟):
(1).特点:
(2).工作环节:
(3).弊端分析:

十四.CMS垃圾收集器参数配置:
-XX:+UseConcMarkSweepGC
-XX:CMSlnitiatingOccupanyFraction(设置堆内存使用率的阈值,一旦达到阈值,便开始进行CMS回收)
-XX:UseCMSCompactAtFullCollection(用于指定在执行完Full GC后对内存空间进行压缩整理,以避免内存碎片产生)
-XX:CMSFullGCsBeforeCompaction(设置进行多少次Full GC后对内存空间进行压缩整理)
-XX:ParallelCMSThreads(设置CMS的线程数量,CMS默认启动线程数是:(年轻代并行收集器的线程数 + 3)/4)

十五.G1垃圾回收器(区域分代化):
(1).概述:
(2).特点:

十六.G1回收器的优势:
(1).并行与并发:
(2).分代收集:
(3).空间整合:
(4).可预测的停顿时间模型(即:软实时soft real-time)

十七.G1垃圾收集器的缺点:
(1).

十八.G1垃圾收集器参数配置:

十九.G1分区Region:
(1).特点:
(2).Bump - the -pointor:分配对象时使用指针碰撞
(3).TLAB: 针对与一个Region为每个线程分配一个TLAB,保证线程共享资源的时候可以并行的去执行

二十.G1回收器垃圾回收过程:
(1).年轻代GC(Young GC)
(2).老年代并发标记过程(Concurrent Marking)
(3).混合回收(Mixed GC)
(4).如果需要,单线程,独占式,高强度的Full GC还是继续存在。它针对GC的评估失败提供了一种失败保护机制,即强力回收
(5).young GC -> young GC + Concurrent Marking -> Mixed GC
(6).回收细节:
young GC 暂停所有应用程序线程,启动多线程执行年轻代回收,然后Eden区移动存活对象到Survivor区间活着老年区间,也有可能两个区间都会涉及到;
当堆内存使用达到一定阈值(默认45%)时,开始老年代并发标记过程;
标记完成马上开始混合回收过程。对于一个混合回收期,G1 GC从老年区间存活对象到空闲区间,这些空闲空间也就成为了老年代的一部分。和年轻代不同,老年代的G1回收器和其他GC不同,G1的老年代回收器不需要整个老年代被回收,依次扫描只需要回收一部分最具回收价值的老年代的Region就可以了。同时这个老年代的Region是和年轻代一起被回收的

二十一.记忆集(Remembered Set)与写屏障(Write Barrier):
(1).记忆集:
注意:在GC Root的枚举范围加入Remembered Set,可以保证不进行全局扫描,也不会有遗漏;

二十二.G1各阶段回收细节:
(1).年轻代GC:

二十三.GC分析工具:GCViewer,EasyGC(easygc.io)

个版本JDK默认的垃圾回收器: