一:是否为垃圾
1,判断为垃圾的标准
当没有被任何对象引用的情况下
2.判断是垃圾的算法
引用计数算法
可达性算法
3.引用计数算法
举例:
父类有一个对子类的引用,子类又引用了父类
4.可达性算法
二:垃圾回收算法
1.标记-清除算法【remark-weep】
图示:
缺点:
标记清楚不需要对象的移动,造成不连续的碎片化。当程序运行,需要分配较大的空间时,没有足够大的连续空间。会触发另一次GC
2.复制算法【copying】
适用:
适用于对象存活率低的场景,例如年轻代
优点:
3.标记整理算法【compacting】
图示:
优点:
4.分代收集算法
组合拳
Minor Gc:
发生在年轻代的gc,采用复制算法
Full Gc:
老年代的回收
5.年轻代
目的:尽快的收集掉生命周期短的对象
minor gc的过程:
发生一次gc,存活的对象被放到survivor中,然后清除eden区的from区
发生第二次gc,会将eden和from存活的对象拷贝到to区,然后清除eden和from区
6.晋升到老年代
经历一定次数的Minor Gc的存活的对象
年轻代放不下的对象
新生的大对象
7.常用的调优参数
8.触发Full Gc
三:年轻代常见垃圾回收器
1.JVM运行模式
server
client
区别:
client启动较快,但是稳定之后,程序运行server更快,因为一个使用的是重量级的,对程序采用更多的优化
2.垃圾回收器之间的关系
3.Serial收集器
复制算法
4.ParNew收集器
复制算法
5.Parallel Scavenge
复制算法
四:老年代常见垃圾回收器
1.Serial Old
标记整理算法
2.Parallel Old
标记整理算法
3.CMS
标记清除算法
4.g1
复制 + 标记整理算法
五:引用
1.软引用
2.弱引用、
3.需引用
4.类