1、什么是垃圾?
a.没有任何引用的对象
b.几个对象循环引用,没有被别的对象引用的对象。
2、怎么定位垃圾
a、引用计数
b、根可达算法
根对象:栈、静态变量、常量池、JNI指针,除根对象及根对象所引用对象以外的都是垃圾。
3、垃圾回收算法
a、标记-清除:缺点:清除后内存不连续、产生碎片化内存
b、copy:把内存平分两部分,内存连续,适合存活对象少的内存,例如新生代,但是浪费空间。
c、标记整理:标记清除之后,再整理,效率低。
常见垃圾回收器
从分代算法到不分代
Serial 支持几十兆内存
Parallel算法支持几个G
CMS支持几十G
G1支持上百G(Garbage First) 逻辑上先分区,物理上不分区,然后优先清理垃圾比较多的地方
ZGC Shanandoah —4T 逻辑和物理上都不分代
查询系统中使用的垃圾回收器命令:java -XX:+PrintCommandLineFlags -version
默认parallelGC=PS+PO
一般用于老年代的垃圾回收
CMS垃圾回收器的工作流程:
初始标记——>并发标记——》重新标记——》并发清理