Java 虚拟机(JVM)作为一门高级语言运行平台,其自动内存管理(Garbage Collection, GC)是其重要优势之一。开发者不需要手动分配与回收内存,从而降低了内存泄漏与野指针等问题的风险。
然而,在高性能、大规模的系统中,对 JVM 内存结构与 GC 行为的理解就显得至关重要。它直接关系到系统的吞吐量、响应时间、可伸缩性和稳定性。
本篇文章将系统性讲解 Java 虚拟机的内存结构、垃圾回收机制、常见回收器种类及 JVM 调优实践。
Java 程序运行时,JVM 会在启动后划分一块进程内存,这块区域又被细分为多个运行时数据区域:
StackOverflowError。OutOfMemoryError: Java heap space。OutOfMemoryError: Metaspace。为了提高 GC 效率,Java 堆采用了 分代回收策略:
| 区域 | 特点 |
|---|---|
| 新生代 | 对象生命周期短,频繁回收 |
| 老年代 | 生命周期长的对象 |
新生代采用 复制算法 回收:Eden + S0 → S1;下一次反过来。
老年代采用 标记-清除 或 标记-整理 算法,回收频率较低。
bash复制编辑-XX:+UseSerialGC
bash复制编辑-XX:+UseParNewGC
bash复制编辑-XX:+UseParallelGC
bash复制编辑-XX:+UseConcMarkSweepGC
bash复制编辑-XX:+UseG1GC
bash复制编辑-XX:+UseZGC
bash复制编辑-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log
| 工具 | 作用 |
|---|---|
| jstat | GC 状态与内存统计 |
| jmap | 导出堆信息、分析对象实例 |
| jvisualvm | 图形化界面,观察 GC、线程、堆 |
| jconsole | Java 管理控制台,监控线程与堆 |
| MAT | Eclipse Memory Analyzer Tool |
| Arthas | 在线诊断工具,功能强大 |
bash复制编辑-Xms1024m -Xmx1024m
建议初始堆大小(Xms)与最大堆大小(Xmx)保持一致,防止频繁扩容。
bash复制编辑-XX:NewRatio=2
表示老年代与新生代的比例为 2:1。
也可以直接设置:
bash复制编辑-XX:NewSize=256m -XX:MaxNewSize=512m
bash复制编辑-XX:SurvivorRatio=8
表示 Eden:Survivor:Survivor = 8:1:1
bash复制编辑-XX:MaxTenuringThreshold=15
表示对象经过多少次 GC 后进入老年代。
我 看 了 许 多 报 道 , 感 觉 找 到 场 景 还 是 很 重 要 的 。 目 标 没 有 选 择 好 、 资 源 用 在 不 重 要 的 地 方 , 就 不 会 出 现 伟 大 的 技 术 。 刚 才 我 想 到 了 一 个 场 景 , 感 觉 价 值 很 大 : 工 厂 流 水 线 的 设 计 。 这 个 想 法 , 可 以 从 若 干 年 前 的 当 评 委 的 一 个 事 情 谈 起 , 若 干 年 前 , 我 评 了 一 个 国 家 级 重 大 项 目 。 其 核 心 工 作 是 通 过 模 拟 生 产 计 划 的 实 施 过 程 , 来 指 导 生 产 线 的 设 计 。 听 完 汇 报 后 , 我 觉 得 这 个 项 目 其 实 没 半 毛 钱 用 处 : 他 们 用 了 几 个 正 常 的 生 产 计 划 来 模 拟 生 产 过 程 。 但 是 , 如 果 仅 仅 考 虑 生 产 正 常 的 情 况 , 根 本 用 不 着 这 样 兴 师 动 众 、 花 几 千 万 、 几 千 个 人 月 的 代 价 开 发 这 个 东 西 。 我 们 真 正 关 心 的 是 : 生 产 过 程 中 可 能 会 出 现 各 种 异 常 , 如 何 设 计 产 线 才 能 让 处 理 异 常 更 加 合 理 。 但 是 我 也 承 认 : 这 个 项 目 非 常 难 做 。 因 为 生 产 过 程 可 能 会 遭 遇 各 种 异 常 、 每 种 异 常 都 可 能 会 有 不 同 的 应 对 策 略 。 应 对 异 常 的 时 候 , 可 能 会 引 发 新 的 问 题 ( 如 时 间 延 迟 、 影 响 下 工 序 ) 、 可 能 面 对 随 机 问 题 ( 如 维 修 结 束 时 间 不 确 定 ) 。 所 以 , 具 体 的 异 常 处 置 需 要 考 虑 工 序 和 设 备 之 间 的 协 调 , 也 是 需 要 经 验 和 水 平 的 。 也 就 是 说 , 仿 真 过 程 需 要 模 拟 一 个 智 能 决 策 过 程 。 从 这 点 上 说 , 和 模 拟 人 下 棋 是 类 似 的 。 我 们 知 道 : 异 常 的 组 合 几 乎 有 无 限 的 可 能 、 调 度 员 的 智 能 水 平 可 能 有 高 有 低 。 我 们 要 在 这 种 情 况 下 评 估 产 线 的 设 计 是 不 是 合 理 的 、 可 否 给 调 度 留 下 足 够 好 的 腾 挪 空 间 。 我 估 计 , 需 要 评 估 成 千 上 万 种 案 例 , 才 能 做 出 合 理 的 评 估 。 但 怎 么 去 构 造 案 例 以 及 调 度 员 相 关 的 应 对 策 略 ? 我 当 时 也 想 不 到 办 法 。 工 作 量 太 大 , 不 值 得 做 。 借 助 大 模 型 的 工 具 , 这 类 项 目 现 在 大 概 可 以 有 办 法 解 决 了 。 单 纯 的 生 产 或 设 备 异 常 可 以 根 据 实 际 的 情 况 进 行 定 义 的 。 对 每 个 异 常 可 能 的 处 理 方 式 , 也 可 以 以 知 识 的 方 式 固 定 下 来 。 然 后 , 可 以 让 机 器 按 照 一 定 的 概 率 随 机 产 生 异 常 、 模 拟 生 产 问 题 。 如 果 有 了 大 模 型 , 可 以 让 机 器 自 动 地 综 合 考 虑 异 常 导 致 的 后 果 , 自 动 地 找 出 比 较 好 的 异 常 处 理 方 法 。 这 时 , 如 果 案 例 给 得 足 够 多 , 就 可 以 确 定 哪 种 流 程 设 计 更 加 有 利 于 日 常 、 非 理 想 状 态 下 的 生 产 管 理 。 什 么 样 的 技 术 价 值 特 别 大 呢 ? 我 认 为 , 可 以 用 竞 争 的 观 点 看 问 题 : 如 果 拥 有 该 技 术 的 人 必 然 战 胜 没 有 该 技 术 的 人 , 价 值 就 特 别 大 。 国 家 和 大 型 企 业 , 就 应 该 把 这 样 的 技 术 作 为 未 来 的 发 展 方 向 、 重 点 投 资 。 大 模 型 在 各 种 研 发 设 计 中 的 应 用 , 可 能 就 有 这 样 的 作 用 。 这 种 场 景 需 要 基 于 若 干 “ 小 智 能 ” 的 工 作 。 这 些 工 作 传 统 上 是 需 要 人 来 做 的 。 从 计 算 机 的 角 度 看 , 如 果 有 了 人 的 介 入 , 计 算 过 程 就 会 产 生 断 点 , 算 力 强 大 的 优 势 就 发 挥 不 出 来 。 只 要 让 大 模 型 完 成 这 个 “ 小 智 能 ” , 就 可 以 减 少 人 的 介 入 、 消 除 计 算 过 程 的 断 点 , 就 可 以 把 算 力 的 优 势 发 挥 出 来 , 让 机 器 帮 助 人 找 到 人 类 找 不 到 的 做 法 。 这 种 技 术 必 定 会 用 于 战 争 的 兵 棋 推 演 。 如 果 对 手 可 能 的 做 法 和 机 会 对 方 都 考 虑 到 了 : 一 旦 选 择 开 战 , 就 会 有 绝 对 的 胜 算 。 现 在 有 些 人 用 大 模 型 做 小 模 型 的 事 情 , 属 于 有 知 识 无 思 想 , 成 不 了 大 气 。 总 之 , 我 们 应 该 设 法 通 过 各 种 技 术 ( 不 仅 仅 是 大 模 型 , 还 包 括 大 数 据 、 信 息 集 成 等 ) , 消 除 人 类 参 与 带 来 的 断 点 , 从 而 为 发 挥 数 字 化 技 术 的 优 势 奠 定 基 础 。 这 些 方 向 才 是 值 得 做 的 大 事 。 自 动 控 制 ( a u t o m a t i c c o n t r o l ) 是 指 在 没 有 人 直 接 参 与 的 情 况 下 , 利 用 外 加 的 设 备 或 装 置 , 使 机 器 、 设 备 或 生 产 过 程 的 某 个 工 作 状 态 或 参 数 自 动 地 按 照 预 定 的 规 律 运 行 。 自 动 化 的 价 值 在 于 提 高 劳 动 效 率 , 降 低 社 会 必 要 劳 动 时 间 。 可 以 使 用 机 器 、 算 法 , 也 可 以 使 用 前 馈 控 制 、 反 馈 控 制 。 能 减 少 人 的 干 预 , 使 工 作 自 动 运 行 的 方 法 都 属 于 自 动 化 。 所 以 有 生 产 过 程 自 动 化 也 有 管 理 运 营 自 动 化 。 自 动 控 制 不 仅 仅 是 仪 表 选 型 、 系 统 组 态 、 P I D 参 数 整 定 、 控 制 方 案 设 计 。 在 生 产 过 程 自 动 化 的 层 面 使 用 先 进 的 设 备 、 完 善 的 工 艺 、 合 理 的 管 理 、 严 密 的 程 序 也 都 能 减 少 人 的 干 预 , 提 高 安 全 和 效 率 。 当 以 零 手 动 操 作 为 目 标 , 按 操 作 频 次 发 现 生 产 过 程 中 的 问 题 后 , 要 找 到 根 本 原 因 制 定 合 理 措 施 解 决 问 题 , 并 根 据 新 的 结 果 持 续 优 化 。 用 简 单 方 法 实 现 自 动 化 。 不 一 定 需 要 反 馈 控 制 程 序 控 制 也 行 , 不 一 定 需 要 整 定 参 数 , 也 许 修 改 其 他 参 数 也 行 。 不 一 定 需 要 修 改 方 案 , 也 许 整 定 参 数 也 行 。 重 新 设 计 方 案 更 新 设 备 和 工 艺 也 是 选 项 。 有 效 果 综 合 成 本 低 比 先 进 、 高 级 更 重 要 。 凡 事 都 有 至 少 三 个 解 决 方 法 。 没 有 办 法 , 只 是 说 明 已 知 的 办 法 都 行 不 通 。 反 馈 控 制 ( f e e d b a c k c o n t r o l ) 是 指 将 系 统 的 输 出 信 息 返 送 到 输 入 端 , 与 输 入 信 息 进 行 比 较 , 并 利 用 二 者 的 偏 差 进 行 控 制 的 过 程 。 反 馈 控 制 是 可 克 服 非 线 性 和 不 确 定 性 影 响 的 抗 扰 方 法 。 而 且 要 比 精 确 建 模 的 抗 扰 方 法 成 本 低 很 多 。 反 馈 控 制 的 鲁 棒 性 可 以 使 用 线 性 三 参 数 的 P I D 实 现 工 业 参 数 的 稳 定 控 制 。 反 馈 控 制 还 可 以 改 进 低 成 本 低 精 度 的 设 备 的 动 态 性 能 , 实 现 更 准 确 更 快 速 的 动 态 控 制 。 反 馈 控 制 不 是 自 动 化 的 唯 一 解 决 方 法 , 但 是 反 馈 控 制 是 低 成 本 高 收 益 的 自 动 化 解 决 方 案 。 反 馈 控 制 的 复 杂 性 是 低 成 本 解 决 抗 扰 和 动 态 性 能 所 必 然 付 出 的 成 本 。 反 馈 无 处 不 在 。 物 种 的 进 化 、 人 类 文 明 的 进 步 、 社 会 的 发 展 、 科 学 与 技 术 的 创 新 无 不 与 自 适 应 反 馈 有 密 切 的 关 系 。 反 馈 普 遍 存 在 于 动 物 和 机 器 中 , 它 实 际 上 存 在 于 一 切 有 目 的 的 行 为 中 。 理 论 上 有 反 馈 的 不 可 能 定 理 , 人 造 系 统 如 果 反 馈 不 能 控 制 的 恐 怕 很 难 制 造 出 来 。 理 论 上 反 馈 都 会 失 效 就 更 不 要 说 P I D 线 性 控 制 算 法 了 , 但 是 大 部 分 工 艺 参 数 还 是 用 P I D , 而 且 性 能 还 过 得 去 。 如 果 不 满 意 调 调 参 数 , 改 改 结 构 往 往 就 可 以 。 P I D 不 厉 害 反 馈 厉 害 ! 在 工 业 自 动 化 和 过 程 控 制 领 域 , 控 制 系 统 的 发 展 经 历 了 从 机 械 式 调 节 器 、 模 拟 电 路 控 制 器 到 数 字 分 布 式 控 制 系 统 ( D C S ) 的 演 进 。 随 着 控 制 理 论 的 日 益 成 熟 与 技 术 的 不 断 进 步 , 控 制 系 统 变 得 越 来 越 复 杂 , 涵 盖 了 多 变 量 控 制 、 嵌 套 控 制 、 前 馈 、 反 馈 、 解 耦 、 模 糊 、 自 适 应 等 诸 多 形 式 。 然 而 , 在 无 数 工 程 师 长 期 的 实 战 经 验 中 , 一 个 令 人 惊 讶 的 结 论 逐 渐 浮 现 : 单 回 路 控 制 , 才 是 过 程 控 制 工 程 思 维 的 终 极 形 态 。 这 并 非 对 复 杂 控 制 理 论 的 否 定 , 而 是 站 在 系 统 设 计 实 用 主 义 的 高 度 , 对 “ 最 有 效 ” 与 “ 最 可 控 ” 的 深 刻 认 知 。 单 回 路 控 制 的 美 , 不 在 其 形 式 简 单 , 而 在 于 它 体 现 了 极 致 的 工 程 抽 象 、 清 晰 的 功 能 边 界 、 最 低 的 干 扰 耦 合 、 最 高 的 可 维 护 性 , 以 及 对 “ 人 机 共 生 ” 理 念 的 最 大 程 度 贴 合 。 本 文 将 围 绕 单 回 路 控 制 的 本 质 、 工 程 优 势 、 与 现 代 控 制 系 统 的 对 比 、 在 实 际 工 程 中 的 应 用 策 略 与 案 例 、 工 程 哲 学 意 义 等 方 面 展 开 全 面 深 入 的 探 讨 , 最 终 回 答 一 个 颇 具 争 议 却 逐 渐 被 工 程 实 践 验 证 的 问 题 — — “ 为 什 么 控 制 系 统 越 做 越 复 杂 , 最 后 却 总 是 要 回 归 单 回 路 ? ” 一 、 什 么 是 “ 单 回 路 控 制 ” 所 谓 “ 单 回 路 控 制 ” , 指 的 是 一 个 控 制 器 对 应 一 个 被 控 变 量 , 它 以 反 馈 或 前 馈 的 形 式 , 通 过 对 一 个 执 行 机 构 的 直 接 操 控 来 实 现 对 该 变 量 的 稳 定 控 制 。 这 个 回 路 包 括 三 个 核 心 要 素 : 测 量 传 感 器 : 提 供 被 控 变 量 的 实 时 测 量 值 ; 控 制 器 算 法 : 对 测 量 值 和 设 定 值 进 行 偏 差 计 算 并 给 出 控 制 输 出 ; 执 行 机 构 : 如 电 动 阀 、 变 频 器 、 加 热 器 等 , 接 受 控 制 信 号 来 影 响 过 程 。 这 种 形 式 下 , 一 个 变 量 对 应 一 个 通 路 , 独 立 闭 环 。 无 耦 合 、 无 嵌 套 、 无 交 叉 干 预 。 可 以 是 纯 反 馈 , 也 可 以 加 上 前 馈 、 限 幅 、 积 分 分 离 、 死 区 抑 制 等 补 充 机 制 , 但 始 终 保 持 “ 一 个 变 量 主 控 、 一 个 通 道 输 出 ” 的 基 本 范 式 。 二 、 为 什 么 说 单 回 路 是 “ 终 极 形 态 ” ? 乍 看 起 来 , 这 种 控 制 形 式 似 乎 过 于 “ 原 始 ” 或 “ 简 陋 ” , 无 法 满 足 现 代 多 变 量 耦 合 系 统 的 需 求 , 但 正 因 如 此 , 它 才 显 得 “ 终 极 ” — — 一 种 经 过 实 战 锤 炼 后 的 工 程 归 一 。 1 . 抽 象 能 力 极 强 单 回 路 是 对 控 制 问 题 的 最 小 抽 象 单 元 。 任 何 复 杂 系 统 , 都 可 以 被 拆 分 成 若 干 个 单 变 量 控 制 目 标 。 通 过 将 多 变 量 系 统 模 块 化 , 每 个 单 回 路 负 责 自 身 指 标 , 工 程 师 可 以 用 统 一 的 思 维 方 式 来 分 析 、 设 计 、 调 试 每 一 个 模 块 。 这 种 抽 象 能 力 极 大 降 低 了 工 程 的 认 知 成 本 。 相 比 多 变 量 交 叉 控 制 带 来 的 思 维 复 杂 性 , 单 回 路 以 最 直 接 的 形 式 建 立 了 “ 输 入 - 输 出 ” 的 线 性 认 知 结 构 , 便 于 快 速 定 位 问 题 、 维 护 系 统 稳 定 。 2 . 干 扰 最 小 , 稳 定 性 高 在 单 回 路 结 构 中 , 每 个 回 路 自 成 闭 环 , 其 输 入 、 输 出 、 控 制 逻 辑 独 立 。 即 使 出 现 某 一 回 路 的 震 荡 或 偏 差 , 也 不 会 直 接 影 响 其 他 回 路 的 稳 定 性 。 相 比 之 下 , 多 变 量 控 制 或 模 型 预 测 控 制 ( M P C ) 虽 然 理 论 上 精 度 更 高 , 但 其 内 部 变 量 耦 合 度 极 高 , 一 处 不 稳 则 全 局 漂 移 , 调 试 难 度 陡 增 。 这 是 为 什 么 许 多 大 型 装 置 在 调 试 阶 段 最 终 回 退 为 多 个 单 回 路 控 制 的 原 因 — — 局 部 稳 定 优 于 全 局 不 稳 。 3 . 可 维 护 性 极 强 单 回 路 的 结 构 简 单 明 了 , 便 于 维 护 人 员 理 解 和 操 作 。 哪 怕 一 位 基 层 操 作 工 , 对 回 路 的 基 本 P I D 参 数 都 有 初 步 认 识 , 并 可 根 据 经 验 进 行 调 节 。 而 对 于 M P C 、 状 态 空 间 控 制 、 解 耦 矩 阵 控 制 等 高 级 控 制 方 式 , 调 试 人 员 往 往 需 要 具 备 数 学 建 模 能 力 与 较 高 的 计 算 资 源 支 撑 。 在 工 厂 一 线 , 这 种 可 维 护 性 就 是 生 命 线 。 一 套 控 制 系 统 再 高 级 , 如 果 只 有 原 厂 工 程 师 才 能 看 懂 , 那 它 必 定 无 法 长 期 稳 定 运 行 。 在 自 动 化 控 制 系 统 的 众 多 设 计 流 派 中 , 单 回 路 控 制 似 乎 显 得 有 些 “ 过 时 ” 。 它 结 构 简 单 、 原 理 直 白 、 功 能 单 一 , 甚 至 在 一 众 多 变 量 、 智 能 、 预 测 、 自 适 应 等 现 代 控 制 技 术 面 前 , 显 得 过 于 朴 素 。 然 而 , 经 历 无 数 现 场 系 统 的 工 程 实 践 后 , 我 们 发 现 这 样 一 个 颇 具 讽 刺 意 味 的 现 实 : 控 制 系 统 越 做 越 复 杂 , 但 真 正 能 稳 定 运 行 、 可 靠 维 护 的 , 常 常 只 有 那 些 被 “ 单 回 路 化 ” 了 的 部 分 。 “ 单 回 路 是 过 程 控 制 工 程 思 维 的 终 极 形 态 ” 这 句 话 , 乍 听 似 乎 有 点 “ 倒 退 ” 的 意 味 , 但 本 质 上 , 它 揭 示 的 是 一 个 被 长 期 忽 视 的 真 理 : 在 工 业 控 制 系 统 中 , 简 单 并 不 意 味 着 低 效 , 相 反 , 它 可 能 是 一 种 接 近 完 美 的 工 程 哲 学 体 现 。 一 、 什 么 是 “ 单 回 路 ” ? 所 谓 “ 单 回 路 ” ( S i n g l e - l o o p C o n t r o l ) , 是 指 一 个 闭 环 控 制 系 统 中 , 控 制 器 只 负 责 一 个 被 控 变 量 的 稳 定 调 节 , 通 过 一 个 执 行 器 直 接 对 该 变 量 施 加 作 用 。 它 通 常 由 以 下 三 个 基 本 组 成 部 分 构 成 : 传 感 器 或 变 送 器 : 采 集 被 控 量 的 实 际 值 ; 控 制 器 : 比 较 实 际 值 与 设 定 值 的 偏 差 , 根 据 控 制 算 法 ( 通 常 为 P I D ) 输 出 控 制 信 号 ; 执 行 机 构 : 接 收 控 制 器 的 信 号 并 直 接 影 响 过 程 ( 如 调 节 阀 、 变 频 器 、 电 加 热 器 等 ) ; 一 个 典 型 的 例 子 是 温 度 控 制 系 统 : 测 温 元 件 采 集 温 度 信 号 , 控 制 器 计 算 温 差 并 输 出 控 制 信 号 , 控 制 电 加 热 器 的 功 率 大 小 来 使 温 度 稳 定 在 目 标 值 。 二 、 单 回 路 的 “ 工 程 美 学 ” 虽 然 在 控 制 理 论 上 , 单 回 路 只 是 一 种 最 基 础 的 形 式 , 但 从 工 程 角 度 看解决: 优化代码、增加老年代、避免显式调用 GC。
可能原因:
JVM 的内存结构与 GC 机制构成了 Java 程序运行的基础平台,掌握它们是进行 Java 性能调优、系统稳定性提升、解决疑难问题的必备技能。
通过本篇文章你应该已经掌握了:
/1
文章评论(0条评论)
登录后参与讨论