jvm内存回收

回收区域:堆【主要区域】、方法区【回收废弃常量、无用类】

无用类定义:
1、jvm中不存在该实例
2、加载该类classLoader已被回收
3、任何地方都不存在引用

回收算法:
1、标记清除
2、标记整理
3、复制
4、分代收集

回收器:
单线程
1、serial
2、serial old
多线程
1、parNew
2、parallel scavenge
3、parallel old
4、cms
5、G1

{———-}

回收新生代
serial、parNew、parallel scavenge

回收老年代
cms、serial old、parallel old

分代收集 G1

serial
最老、也是默认回收算法、单线程
缺点:暂定所有用户进程来回收垃圾、每一小时有五分钟不能给用户提供服务
优点: 简单高效
适合场景、clent模式

ParNew
serial多线程版本
场景:参考serial 多核处理器

Parallel scavenge
1、复制算法
2、目标、回收达到一个可控的吞吐量【吞吐量=运行代码时间/(运行代码时间+GC时间)】
3、吞吐量优先收集器

serial old
1、单线程、标记整理算法
2、serial 老版本
3、jdk1.5之前配合Parallel scavenge、cms后备预案

parallel old
1、Parallel scavenge老版本
2、标记整理算法
3、注重吞吐量以及CPU资源敏感场景、使用Parallel scavenge ++ parallel old
4、吞吐量优先

CMS
1、标记清除
2、目标:最短回收停顿时间
3、四个步骤:初始标记、并发标记、重新标记、并发清除

G1
1、1.7HotSpot重要进化特征
2、优点:并行并发、分代收集、空间整合【标记整理】、可预测停顿
3、四个步骤:初始标记、并发标记、最终标记、筛选回收

对象回收算法:引用计数法、引用不可达算法、