JVM 老年代垃圾回收(Major GC)怎么触发

秋萱同学_2590

秋萱同学_2590

2026-11-05

860人浏览

原创

Major GC由晋升压力或担保失败被动触发,非老年代填满才执行;核心是“有对象要进但空间不足”,如Minor GC前检查老年代剩余空间不足以容纳待晋升对象,或大对象直接分配失败时触发。

jvm 老年代垃圾回收(major gc)怎么触发

老年代垃圾回收(Major GC)不是靠“老年代填满”才触发,而是由晋升压力或空间担保失败被动引发的。它不主动轮询、也不定时执行,核心是“有对象要进来,但地方不够了”。

主要触发场景:晋升失败

Minor GC 后,一批存活对象准备从新生代晋升到老年代,但 JVM 检查发现老年代剩余连续空间 小于这批对象总大小,就触发 Major GC 来腾地方。这个检查叫“晋升担保(Promotion Guarantee)”,发生在 Minor GC 开始前。

  • 哪怕老年代只用了 70%,只要剩余空闲空间不连续或太小,仍可能担保失败
  • 大对象(如超长数组)跳过新生代直接分配,若老年代无法容纳,也会触发 Major GC
  • 某些收集器(如 CMS)在并发标记未完成时老年代就耗尽,会退化为 Serial Old 单线程回收——这也算 Major GC

其他可能路径

不是所有 JVM 都支持纯老年代回收,但以下情况可能单独清理老年代:

Java调试
Java调试

通过 JDWP 实现 Java 远程调试:连接远程 JVM、设置断点、单步执行代码、查看变量值、获取调用栈。适用于需要调试远程 Java 应用、排查运行时状态、追踪代码执行流程的场景。 术语注解 JDWP:Java Debug Wire Protocol,Java 调试有线协议(Java 远程调试底层通信协议) remote JVM:远程 Java 虚拟机 step through code:代码单步调试(步入 / 步过 / 步出调试) inspect variables:变量查看 / 变量检视 stac

下载
  • CMS 收集器运行中出现 Concurrent Mode Failure(并发模式失败)
  • Parallel Old 收集器在特定配置下可跳过 Minor GC,直接启动老年代回收
  • 显式调用 System.gc() 且未禁用(-XX:+DisableExplicitGC),JVM 可能选择只回收老年代

注意几个常见误解

“Major GC”不是 JVM 规范术语,不同日志或工具含义可能不一致:

  • 日志里只标 Old、没 Young 和 Metaspace 动作,才是较可靠的 Major GC
  • 很多团队把 Full GC 叫成 Major GC,实际它回收的是整堆+元空间
  • Survivor 区满、Eden 未满,不会触发任何 GC;老年代“快满”但没到晋升临界点,也不会触发

真正决定是否回收、怎么回收的,是所选垃圾收集器及其参数。比如 G1 会在老年代占用率达 -XX:InitiatingOccupancyPercent 时启动并发标记,ZGC 则基本不出现传统意义上的 Major GC。

相关专题

更多
DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

XORM框架零基础入门教程
XORM框架零基础入门教程

本专题梳理XORM框架的入门路径,从框架定位、依赖安装、连接数据库到跑通第一个增删改查示例,讲清Engine初始化、日志开启与项目目录规划,并对比GORM等同类ORM的差异,帮助Go开发者建立整体认知。

2026.11.04

0

15

Docker Desktop怎么设置端口映射
Docker Desktop怎么设置端口映射

本专题聚焦Docker Desktop容器端口映射与访问配置,整理从创建容器、设置端口绑定到验证本地服务访问的操作流程。针对端口被占用、映射配置错误、容器服务无法访问等情况,也提供相应的检查方向,方便用户完成端口配置。

2026.11.03

20

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习