Ⅳ.GC
1.GC简介
GC,又称YGC,只针对新生代的GC;
FGC,GC后不满足对象存储会发生FGC,针对新生代,养老代,元空间的GC;
FGC后依然不满足对象存储会发生OOM。
-XX:+PrintGCDetails 输出GC日志
2.GC详述
GC即分代收集算法,包括
次数上频繁收集的新生代,
次数上较少收集的养老代,
基本不动的元空间。
3.GC判断
3.1 引用计数法
3.2 可达性分析
4.GC算法
4.1 复制算法
发生在YGC中
优点:复制算法的核心优势是不会产生碎片,保证eden和from区会有大块可用空间;
缺点:产生一定空间的浪费。
4.2 标记清除
发生在FGC中
优点:不需要额外的空间;
缺点:两次扫描更耗时,产生内存碎片。
4.3 标记压缩
发生在FGC中,由标记清除+标记整理实现。
优点:没碎片,无额外空间。
缺点:浪费时间
4.4 综合比较
5.其他
4.1 System.gc();
手动GC(相较于系统的自动GC),是否开启GC取决于GC线程是否已经准备就绪,正常编程禁止使用手动GC。
一个运行的空类包括main和GC两个线程。