垃圾回收
2020-11-20 14:15:35 0 举报
AI智能生成
JVM 垃圾回收
作者其他创作
大纲/内容
回收算法
标记-清除
原理
标记:通过GC Roots,标记存活对象
清除:清除未被标记对象
缺点
效率低
内存碎片
标记-整理
优点
没有内存碎片
不需要额外空间
复制
优点
没有内存碎片
垃圾对象多时效率高
缺点
内存利用率低
分代
原理
将内存分为不同的块(年轻代,老年代)
不同的块采用不同的回收算法
优点
充分利用不同的算法
收集器
Serial
优点
简单高效,适合client
算法
新生代:复制
老年代:标记-整理
ParNew
原理:多线程版Serial
算法
新生代:复制
老年代:标记-整理
Parallel Scavenge
关注点:吞吐量,高效利用CPU
原理:类似ParNew,OldGen可单独设置
UseParallelGC
Parallel + 老年代串行
UseParallelOldGC
Parallel + 老年代并行
CMS
优点
停顿时间短
缺点
吞吐量低
浮动垃圾
清除阶段新产生的垃圾对象
空间碎片
算法
标记-清除
回收过程
1.初始标记
1.标记老年代与GC Roots相连的对象
2.标记年轻代中存活对象引用到的老年代对象
2.并发标记
跟踪记录对象引用变更的地方
3.预清理
清理前准备已及控制停顿时间
4.重新标记
修正并发标记的数据
5.并发清除
清理未标记的垃圾对象
6.并发重置
清理数据结构,为下一次并发收集做准备
G1
优点
停顿时间短,可预测性
吞吐量
全局标记-整理,局部复制
原理
1.内存分成多个region
2.分代收集
3.可预测停顿
回收过程
yong gc
触发
eden region耗尽
过程
选择yong gc 的 CSet
复制GC Root直接引用的对象到 Survivor Region
处理老生代到新生代分区的引用
深度扫描,复制存活对象到Survivor Region
mixed gc
触发
老年代占整个堆大小百分比(IHOP)
过程
初始标记
根扫描区
并发标记
重新标记
找出所有未被访问的存活对象,写入STAB
独占清理
是统计存活对象,对分区进行排序
可能的Full GC
触发
对象分配过快,mixed gc 来不及回收
过程
并发标记
重新标记
复制/清理
ZGC
原理
着色指针
读屏障
引用类型
强引用
软引用
高速缓存,ImageCache
弱引用
ThreadLocalMap.key
虚引用
跟踪垃圾回收过程
判断对象存活
引用计数
原理
1.为每个对象分配一个整型计数器
2.引用则+1,失效-1
缺点
无法处理循环引用(ABA)
频繁计数带来的性能影响
可达性分析
GC Roots
虚拟机栈中引用对象
本地方法栈中引用对象
方法区静态类属性引用对象
方法区中常量引用对象
原理
一个对象到 GC Roots 是否有引用链相连
STW
原因
1.保证系统在某一瞬间的一致性
2.更好的标记对象
安全点
循环的末尾
方法返回前
方法调用前
抛出异常的位置
0 条评论
下一页