05-JVM-垃圾回收器

一、GC评估指标

在这里插入图片描述

二、垃圾回收器

在这里插入图片描述
面试题
在这里插入图片描述

Serial GC

在这里插入图片描述

ParNew GC

在这里插入图片描述

Paraller Old

在这里插入图片描述
在这里插入图片描述

CMS

在这里插入图片描述
在这里插入图片描述

问题

CMS是内存不够才能进行垃圾回收吗?
答:不是,由于CMS是并发进行垃圾回收的,如果当内存不够时再进行垃圾回收,此时用户线程仍然再产生垃圾,很容易报错OOM,所以我们需要手动的设置一个阈值,当老年代内存达到这个阈值的时候就可以进行垃圾回收

为什么不使用标记-压缩算法进行垃圾回收
答:原因也是因为CMS是并发进行垃圾回收的,如果使用标记压缩算法,那么会移动堆中的数据,造成用户线程无法找到对象位置

G1

在延迟可控的情况下尽可能高的提高吞吐量,使用场景:内存较大、多个处理器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Young GC

  1. 初始标记:标记GC Roots直接引用的对象,速度很快
  2. 更新&处理RSet:更新并处理RSet,将年轻代中被老年代所引用的对象添加的GC Roots中
  3. 复制对象:使用标记-复制算法,将标记的存活对象往空的survivor区或老年代中放,并清除其它eden区域

Mixed GC

  1. 初始标记:执行Young GC,并复用Young GC的初始标记
  2. 并发标记:该过程和用户线程同时执行,根据GC Roots往下追溯,查找整个堆的存活对象,比较耗时
  3. 重标记:根据原始快照,将并发标记中发生改变的旧引用记录下来,将其添加到GC Roots中
  4. 清理:根据region中存活对象的比例从小到大排列,再根据设置的垃圾回收时间得到回收region的数量,清理排名靠前的region

注意:原始快照能够保证不因为引用变化出现对象消息的问题,但是它不会处理那些变成垃圾的存活对象,存在浮动垃圾

Full GC

当混合回收的速度跟不上垃圾产生的速度的时候触发Full GC,使用serial old进行垃圾回收

GC日志分析

在这里插入图片描述

JVM监控及诊断-命令行篇

面试题

在这里插入图片描述

常见命令

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值