JVM常见垃圾回收器

串行垃圾回收器

Serial和Serial Old串行垃圾回收器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑

  • Serial作用于新生代,采用复制算法

  • Serial Old作用于老年代,采用标记-整理算法

垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收完成

并行垃圾回收器

Parallel New 和 Parallel Old是一个并行垃圾回收器,JDK8默认使用此垃圾回收器

  • Parallel New作用于新生代,采用复制算法

  • Parallel Old作用于老年代,采用标记-整理算法

垃圾回收时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成

CMS(并发)垃圾回收器

CMS1一款并发 的,使用标记-清除 算法的垃圾回收器,该回收器是针对老年代垃圾 回收的,是一款以获取最短回收停顿时间为目标的收集器,停顿时间段,用户体验就好。其最大特点是在进行垃圾回收时,应用仍能正常运行。

G1(Garbage first)垃圾回收器

  • 应用于新生代和老年代,在JDK9之后默认使用G1

  • 划分成多个区域,每个区域都可以充当Eden、survivor、old、humongous,其中humongous专为大对象设计

  • 采用复制算法(划分多个区域就是为了采用复制算法)

  • 响应时间与吞吐量兼顾

  • 分成三个阶段:新生代回收、并发标记、混合收集

  • 如果并发失败(即回收速度赶不上创建新对象的速度),会出发Full GC

Young Collection

  • 初始化时,所有区域都处于空闲状态

  • 创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象

  • 当伊甸园需要垃圾回收时,跳出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程

  • 随着时间流逝,伊甸园的内存又有不足

  • 将伊甸园以及之前的幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代

YoungGC+Concurrent Mark(年轻代垃圾回收+并发标记)

  • 当老年代占用内存超过阈值(默认是45%)后,触发并发标记,这时无需暂停用户线程。

  • 并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程。(STW时间较短)

  • 重新标记完成后就知道老年代有哪些存活对象,随后进入混合收集阶段。 此时不会对所有老年代区域进行回收,而是根据暂停时间目标优先回收价值高(存活对象少) 的区域。(这就是Gabage First名称的由来 垃圾多的区域优先)

相关推荐
Joy T2 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383005 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·5 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
专注仿真5 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
Best-Wishes6 小时前
科来网络分析系统(技术交流版)使用说明书
开发语言·junit·php
代码不停6 小时前
自动化测试(java)
java·开发语言·selenium·自动化
鬼手点金8 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
爱上网的小舟8 小时前
星际战士2启动错误怎么办?5种游戏报错解决方法
开发语言·php
paopaokaka_luck9 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
阿里嘎多学长9 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管