JVM垃圾回收器常见知识点&面试题总结

本文介绍了JVM中的常见垃圾回收器,包括Serial、ParNew、ParallelScavenge、SerialOld、ParallelOld、CMS和G1。重点讨论了CMS追求短暂停顿时间与G1解决内存碎片问题的特点,以及如何根据应用场景选择合适的垃圾收集器。
摘要由CSDN通过智能技术生成


JVM垃圾回收器

面试题

常见的垃圾回收器有哪些?

  • Serial 收集器:单线程工作的收集器,在垃圾收集时,必须暂停其他所有工作线程,直到收集结束
  • ParNew 收集器:Serial 收集器的多线程并行版本
  • Parallel Scavenge 收集器:与 ParNew 相似,关注点是吞吐量(CPU 中运行用户代码时间/CPU 总消耗时间的比值)
  • Serial Old 收集器:Serial 收集器的老年代版本;单线程收集器
  • Parallel Old 收集器:Parallel Scavenge 收集器的老年代版本
  • CMS 收集器:是一种以获得最短回收停顿时间为目标的收集器
  • G1 收集器:具有局部收集的设计思路和基于 Region 的内存布局

CMS 收集器?

  • CMS 收集器是以获取最短回收停顿时间为目标的收集器
  • 基于标记 - 清除算法实现,垃圾回收过程:
    • 初始标记:单线程运行,标记 GC Roots 能直达的对象
    • 并发标记:无停顿,和用户线程同时运行,从 GC Roots 的直达对象开始遍历整个对象图
    • 重新标记:多线程运行,需要暂停所有用户线程,修正并发标记期间产生对象
    • 并发清除:无停顿,和用户线程同时执行,清理掉标记阶段判断的已经死亡的对象
  • 缺点:
    • 依赖 CPU 资源
    • 无法处理浮动垃圾
    • 收集结束会有大量空间碎片

G1 收集器

  • G1 收集器:具有局部收集的设计思路和基于 Region 的内存布局
  • 垃圾回收步骤:
    • 初始标记:标记 GC Roots 能直达的对象
    • 并发标记:和用户线程同时运行,从 GC Roots 开始遍历对象图
    • 最终标记:标记在并发标记过程中产生的垃圾
    • 筛选回收:指定回收计划,选择多个 Region 构成回收集,把回收集中 Region 的存活对象复制到空的 Region 中,再清理掉旧的 Region 空间

有了 CMS,为什么还要引入 G1?

CMS 有三个明显的缺点:

  • 依赖对 CPU 资源
  • 无法处理浮动垃圾
  • 收集结束会有大量空间碎片

G1 主要解决了内存碎片多的问题

垃圾收集器应该如何选择?

  • Serial:在没有停顿时间要求的单线程处理器上运行
  • Parallel:优先考虑应用程序的性能,对停顿时间没有什么要求
  • CMS/G1:对停顿要求和用户体验有要求的场景

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值