1.什么是垃圾回收机制
JVM提供的自动垃圾回收机制,在空闲时间不定时回收无引用对象的对象内存空间。
2.什么时候垃圾回收
2.1 内存满了
2.2 cpu空闲
2.3主动调用System.gc()后尝试进行回收
3.如何判断可以垃圾回收
1.引用计数,若一个对象的引用次数为0,即没有被使用就进行回收
2.可达性分析 若GCroot为根节点向下搜索,对象没有和GCroot有关联,即可回收。
(
可作为GCroot的对象
1.虚拟机栈中的引用对象
2.方法区中的静态属性引用的对象
3.方法区中的常量引用的对象
4.本地方法栈中JIN的引用对象
)
4.垃圾回收算法
1.标记-清除 第一就是标记,也就是标记所有的需要回收的对象;第二就是清理,标记完成后进行统一的回收带有标记的对象占据的内存空间。
2.复制算法 将内存分为两块,当一个区域满了,将存活对象复制到另一个区域,清空满的区域
3.标记-整理,标记-清除后,对存活对象的内存空间进行整理,使得内存空间连续。
5.垃圾收集器
1.CMS 收集器 一种以获取最短回收停顿时间为目标的收集器。
基于标记-清除算法实现
过程为四个步骤
1.初始标记 标记GC Roots能直接关联到的对象
2.并发标记 GC Roots Tracing ,从上往下搜索关联的对象
3.重新标记 修正并发标记期间因用户程序而标记产生变动的对象
4.并发清除 回收不用的对象
缺点 仍然占用线程 会有浮动垃圾和内存碎片
2.G1 收集器 取消了老年代新生代的物理空间划分,改为划分许多小区域,
为Eden、Survivor、Old、Humongous区。
回收的衡量标准为哪块内存中存放的垃圾数量最多,回收收益最大。
过程为四个步骤
初始标记,标记GCroot能直接关联到的对象。
并发标记 ,GCroot可达性分析。
最终标记 对用户线程进行一个短暂暂停,处理并发阶段结束后有引用变动的对象。
筛选回收,对各个区域的回收效益排序,制定回收计划,进行回收。
G1 Young GC
在eden空间耗尽时会被触发,在这种情况下,Eden空间的数据移动到Survivor空间中。如果Survivor空间不够,部分数据晋升到老年代空间。
G1 Mix GC 回收新生代和老年代
三色标记算法
黑色 根对象,扫描过子对象的对象
灰色 扫描到的对象,子对象没被扫描
白色 没被扫描到的对象
GC扫描完,回收白色对象。
参考&搬运
JVM垃圾回收机制
https://blog.csdn.net/zhangxing52077/article/details/87930248
CMS垃圾收集器
https://www.jianshu.com/p/86e358afdf17