算法的基础概念
G1的介绍
-
Card table(jvm的优化)
由于做YGC时,需要扫描整个OLD区,效率非常低,所以JVM设计了CardTable, 如果一个OLD区CardTable中有对象指向Y区,就将它设为Dirty,下次扫描时,只需要扫描Dirty Card在结构上,Card Table用BitMap来实现
屏幕快照 2020-12-25 下午2.55.15.png
caed table 是上图中所有的card(是分页的)的集合,使用BitMap进行标记,BitMap中的每一bit位与card一一对应。
-
CSet
屏幕快照 2020-12-25 下午5.14.22.png
- 收集的是那些card
-
RSet
屏幕快照 2020-12-25 下午5.32.18.png
1.是三色标记实现的关键
- ZGC没有这个引用(使用的是颜色指针 使用其中的3位进行标记)
- 拓展 -> 阿里的多租户jvm
- 每租户单空间
将jvm分割为好多的独立的空间,分配给某个租户使用 - session base gc
以web app, session为单位相关的对象,一旦session 消失了,则将与之相关的对象进行gc,更高效
- 新老年代的比例
- 5% ~ 60%
- 一般不需要手工指定
- 也不要手工指定,因为这是G1预测停顿时间的基准。动态的调整 自动的进行优化
- 逻辑分代(4个)
-
伊甸区、幸存区、老年区、大对象区
屏幕快照 2020-12-25 下午5.53.28.png
上图的次数是由4位bit指定的(栈指针中 待确认)
-
大对象
超过单个region的50%
或跨多个region
屏幕快照 2020-12-25 下午6.05.35.png
-
触发GC条件
屏幕快照 2020-12-25 下午6.06.35.png - 延伸
如果G1产生FGC,你应该做什么?
- 扩内存
- 提高CPU性能(回收的快,业务逻辑产生对象的速度固定,垃圾回收越快,内存空间越大)
- 降低MixedGC触发的阈值,让MixedGC提早发生(默认是45%)
MixedGC ~ CMS 流程很相似
jdk10以前是串行的FGC 10以后是并行的,所以要尽量减少的FGC的发生
————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注
网友评论