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两个线程。
网友评论