Garbage Collection Roots:
- Local variables
- Active threads
- Static fields
- JNI references(本地方法引用的对象)

因为新生代朝生夕死,死得快

串行收集器 :单线程, 用于内存小的嵌入式设备


实际中就是这2个之间做权衡

串行收集器
-XX: + UseSeriaIGC新老都开启 没啥好说的 web不会用到
并行收集器
-XX:+UsePara|lelGC新老都开 吞吐量优先 只开老-XX:+UseParalIelOIdGC
Server模式下默认这个 (内存>2G是Server)
内存不够了,就停用户线程, 启动多个线程来垃圾回收
默认都是这个

-XX:ParallelGCThreads= 几个线程来垃圾回收
CPU >8 N=5/8
CPU <8 N =CPU
自适应: 这样设以后,会自动调优 先满足最小停顿时间,再满足吞吐量 最后满足最小堆
-XX:MaxGCRauseMillis= < N > 停顿时间
-XX:GCTimeRatio= < N > 吞吐量
-Xmx<N>最小堆
动态调整大小比例设置
-XX:YoungGenerationSizelncrement= <Y>
-XX:TenuredGenerationSizelncrement= <T>
-XX:AdaptiveSizeDecrementScaleFactor= < D >
并发收集器
CMS:XX: + UseConcMarkSweepGCold收集器 默认配套开启-XX: + UseParNewGCnew区是这个
G1:-XX:+UseG1GC



如何选择垃圾收集器
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/collectors.html
GC调优指南:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/toc.html