GC
2021-04-11 11:00:20 38 举报
GC笔记
作者其他创作
大纲/内容
线程栈变量
1、跟踪引用的增加
CardTable
dirty card
ParNew
垃圾的定义
BitMap
Copying
O
E
S
H
垃圾回收器
同CMS过程类似
Young
MixedGC
自身被标记,成员变量未标记
FullGC
YGC
Eden8
MajorGC
Rset (Remembered Set)
Old
Card
Paraller Scavebge & Paraller Old
新老年代比例自动调整
定位垃圾算法
YGC | FGC | MixedGC
Eden
垃圾
扫描整个Old
没有任何引用的对象即为垃圾。
2、由于Rset中记录了引用关系,所以不需要遍历整个堆,查找指向的引用
扩容
算法
并发标记算法
B
引用改变
dirty
实现
常量池
只扫描Dirty Card
Sorvivor
垃圾收集算法
需要被回收的Card集合。
0 1 0 0 0 0 1 0
发生漏标
解决方法
Mark-Sweep
漏标解决方案
三色标记法
对象循环引用→内存泄漏
G1
标记
To1
... ...
Paraller Scavebge
分代收集
GC Stack
难点:标记后引用发生改变
ZGC
多线程
Serial & Serial-Old
⭕无碎片;❌浪费50%空间;❌需要移动复制数据(调整指针)。
⭕简单;❌两轮标记,效率较低;❌碎片化。
1、拿到这个引用
Serial
Cset (Collection Set)
STW
❌
sln
CMS
引用计数算法
⭕效率高
2、跟踪引用的消失
GC
黑→灰
Humongous
Serial-Old
Mark-Compact
A
Shenandoah
Incremental update
自身&成员变量均被标记
Mthod Area
❌需要重新再扫描一遍
Region
SATB (Snapshot at the beginning)
A→B
FGC
每一个Region都有一个HashSet,记录里面的对象被哪些对象应用。
roots→Old
标记过程
Young 1
Push
并发
From1
可达性分析算法
降低MixedGC发生的阈值
Remark
静态变量
YGC/MinorGC
Old 2
逻辑分代,物理不分
Card Table
查找GCRoots
Mark-Sweep/Mark-Compact
兜底
提高CPU
SLN
JNI指针
未被标记
三色标记
ColoredPointers
写屏障
读屏障
Paraller New 配合CMS使用
Dbug使用
Paraller Old
单线程
尽量不要发生
GC Root Set
Epsilon
⭕无碎片;⭕无空间浪费;❌扫面两次,效率低。❌需要移动复制数据(调整指针)。
0 条评论
回复 删除
下一页