网站建设 嘉定网站建设有什么意义

张小明 2026/1/8 15:19:31
网站建设 嘉定,网站建设有什么意义,企业网站怎么做的更好,软件园二期做网站的公司JVM 中一次“完整 GC 流程”详解#xff08;从分配到回收#xff09;这里的“完整 GC 流程”不是指某个固定的“统一步骤”#xff08;不同垃圾回收器实现差异很大#xff09;#xff0c;而是用最常见的分代 HotSpot JVM 视角#xff0c;把一次 GC 从“为什么触发”到“如…JVM 中一次“完整 GC 流程”详解从分配到回收这里的“完整 GC 流程”不是指某个固定的“统一步骤”不同垃圾回收器实现差异很大而是用最常见的分代 HotSpot JVM 视角把一次 GC 从“为什么触发”到“如何停顿/并发/回收/整理/恢复执行”串起来讲清楚。你可以把它理解为**对象从出生分配→ 青年回收Young/Minor GC→ 晋升到老年代 → 混合回收Mixed→ 退化/全量回收Full GC**的完整生命线。1. JVM 内存与对象生命周期复习用于理解 GC 流程典型 HotSpot 分代堆逻辑视角Young Generation年轻代Eden伊甸园SurvivorS0 / S1两个幸存区Old Generation老年代可选Metaspace元空间类元数据不在 Java 堆里JDK8可选Direct Memory直接内存NIO/Netty 常用不在堆里受-XX:MaxDirectMemorySize等影响对象通常的“命运”大部分对象在Eden 分配第一次/多次 Young GC 后存活进入Survivor对象“年龄”增加达到阈值或 Survivor 放不下 →晋升Promote到 OldOld 压力大 → Mixed/Old GC 或最终 Full GCFull GC 可能同时涉及Old Metaspace甚至触发类卸载2. GC 触发点为什么会发生一次 GC2.1 Young/Minor GC 的典型触发Eden 空间不足最常见Allocation Failure无法为新对象分配内存TLAB/eden2.2 Mixed GC / Old GC / Full GC 的典型触发老年代占用达到回收器阈值例如 G1 触发 Mixed晋升失败Promotion FailureYoung GC 后需要晋升到 Old但 Old 放不下并发回收来不及导致退化例如 CMS 的concurrent mode failureG1 的to-space exhaustedSystem.gc()可被-XX:DisableExplicitGC影响元空间压力类加载太多、动态代理、频繁生成类等导致的 Full GC / 类卸载3. 一次典型 Young GC 的完整流程分代、复制/转移下面流程以“分代 复制Copying/转移”的思路讲Serial/ParNew/Parallel Scavenge/G1 的年轻代回收在概念上都类似。3.1 前置对象分配TLAB → Eden线程优先在 TLAB 分配TLABThread Local Allocation Buffer是线程私有的小块 Eden 切片好处分配时几乎无需加锁快TLAB 不够就去 Eden 公共区域分配Eden 也不够 → 触发 Young GC通常是 STWInsight你看到的“GC”其实往往是“分配失败的后果”所以排查 GC 频繁要从“分配速度”和“存活率”入手。3.2 进入安全点Stop-The-WorldSTWYoung GC 多数情况下需要 STW即使某些回收器有并发阶段关键阶段仍要停。大致步骤JVM 发起 GC 请求各线程运行到Safepoint安全点停下或被抢占到安全点保存线程状态进入 GC 线程执行回收3.3 根扫描Root ScanningGC 的第一件大事找到“仍然活着的对象”的入口。GC Roots 常见来源各线程栈上的引用局部变量、参数静态变量引用staticJNI 引用类加载器、系统类等内部结构同步锁持有的对象monitor处理中的引用队列finalizer/Reference 等这一步的目标得到“活对象集合”的起点然后向下遍历对象图。3.4 标记存活对象Mark从 Roots 出发遍历对象引用关系被访问到的对象标记为“存活”未被标记的对象视为“垃圾”注意在分代回收中Young GC 通常只回收 Young但对象引用可能跨代老年代对象引用年轻代对象Old → Young这会影响 Young GC 的 Root 集合范围3.5 处理跨代引用Remembered Set / Card Table为了避免每次 Young GC 都扫描整个老年代JVM 用 **Card Table卡表**记录“老年代哪些区域写过指向年轻代的引用”Young GC 时只扫描“脏卡”对应的区域 → 作为额外 Roots这依赖写屏障Write Barrier当你写一个引用字段obj.field newObj时JIT 会插入记录逻辑把对应卡标记为 dirty3.6 复制/转移Copy / Evacuate与对象年龄常见的年轻代回收是“复制算法”Eden 中存活对象复制到 Survivor目标 S 区Survivorfrom中的存活对象复制到 Survivorto每复制一次对象年龄 age如果 Survivor 放不下或 age 达到阈值MaxTenuringThreshold等则对象晋升到老年代这里会发生你最关心的点晋升压力如果老年代空间不足以容纳晋升对象就可能触发更重的 GC甚至 Full GC。3.7 引用处理与 Finalization常被忽略但很关键GC 过程中需要专门处理SoftReference/WeakReference/PhantomReferencefinalize()历史包袱强烈不建议依赖这些会涉及 ReferenceQueue、Finalizer 队列等可能引入额外开销和不可控延迟。3.8 清理与重置回收 Eden / From SurvivorEden、From Survivor 的空间整体“清空”逻辑上回收To Survivor 成为新的 From Survivor交换角色更新分代边界信息、统计信息如年龄分布3.9 恢复执行退出 STWGC 线程结束本次回收解除 safepoint恢复业务线程继续对象分配与执行4. 如果这次 Young GC 不够Mixed / Old / Full GC 的“完整链路”当对象存活率高、晋升快或老年代积压GC 会进入更重的阶段。4.1 G1从 Young 到 Mixed 的典型完整流程最常见生产配置之一G1 的堆被划分为许多Region不再是固定 Young/Old 大块但逻辑上仍是分代。一次典型“完整链路”可能是(1) Young GCSTW主要回收 Eden Regions可能回收部分 Survivor Regions对象转移Evacuation(2) 并发标记周期Concurrent Mark Cycle当老年代占用达到阈值G1 启动并发标记Initial Mark初始标记STW很短标记 Roots 直达对象并触发 SATB 相关机制Concurrent Mark并发标记与业务线程并发遍历对象图Remark再标记STW修正并发期间遗漏结合 SATB/写屏障Cleanup清理统计各 Region 的存活率决定哪些 Old Region “最值得回收”(3) Mixed GCSTW多次发生每次 Mixed 会回收Young Regions 一部分“垃圾占比高”的 Old Regions目标用可控停顿把老年代垃圾逐步清掉避免一次超长 Full GCMixed 的核心“挑最划算的老年代 Region 回收”Garbage First 的名字来源(4) 退化到 Full GC最不想见到如果发生to-space exhausted转移目标空间不足并发标记来不及老年代持续膨胀内存碎片/元空间等问题G1 可能触发Full GCSTWMark-Compact停顿会明显变长。4.2 Parallel/SerialFull GC 的典型流程Mark-Sweep-Compact传统 Full GC 多是STWRoots 扫描Mark标记Sweep清除回收未标记对象Compact压缩整理内存消除碎片更新引用恢复执行InsightFull GC 痛点在于“老年代对象多 需要整理引用/压缩”不是简单清理那么轻松。5. 把一次“完整 GC”串成一条时间线从业务视角下面是你在生产上经常遇到的一条完整链路概念版业务线程高速创建对象 → Eden 增长Eden 满 → Young GCSTW存活对象进入 Survivor部分晋升到 Old老年代逐渐膨胀到达阈值 → 启动并发标记G1/CMS 等多次 Mixed GC / Old GC 清理老年代垃圾如果并发回收跟不上 / 晋升过快 / 空间碎片严重→ 退化为 Full GCSTW最重Full GC 后如果仍无法分配→OutOfMemoryError堆/元空间/直接内存等6. 你在 GC 日志里会看到什么关键词对照常见关键词不同回收器输出不完全一致Pause Young (Normal)正常年轻代停顿Pause Young (Allocation Failure)分配失败触发 Young GCPause Young (Mixed)混合回收G1Concurrent Mark Cycle并发标记周期开始G1Remark/Cleanup再标记/清理Full GC全量回收STW通常最重Promotion failed/to-space exhausted晋升/转移失败信号危险7. “完整 GC 流程”最常见的性能瓶颈点排查方向对象分配速率过高大量短命对象 → Young GC 频繁但不一定坏看停顿对象存活率过高Survivor 装不下 → 晋升多 → Old 快满老年代回收跟不上Mixed 次数增多/停顿变长并发回收退化为 Full GC直接导致延迟飙升元空间/类卸载问题动态类过多导致 Full GC 或 OOM Metaspace直接内存 OOM堆看起来没满但系统内存吃光8. 结尾给你一张“脑内流程图”ASCII对象分配(TLAB/Eden) | v Eden 不够? ----否---- 继续跑 | 是 v Safepoint - STW | v Root 扫描 处理跨代引用(RSet/Card) | v 标记存活对象(Mark) | v 复制/转移到 Survivor / 晋升到 Old | v 引用处理(Soft/Weak/Phantom) Finalize队列 | v 清空 Eden/From 交换 Survivor | v 恢复执行(退出STW) | v Old 增长到阈值? - 并发标记 - Mixed GC 多次 | v 极端情况: 转移失败/并发来不及/碎片严重 - Full GC(STW)9. 建议你怎么用这份文档面试按第 3 节Young GC 第 4 节G1 Mixed/Full讲基本够打。线上排查对照第 6 节日志关键词结合“触发点 → 流程阶段 → 瓶颈点”定位问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

推荐个2021能看的网站wordpress图片中文

NPDP产品经理认证完整攻略:从入门到精通 【免费下载链接】产品经理认证NPDP知识体系指南分享 《产品经理认证(NPDP)知识体系指南》是一份全面的产品经理知识体系指南,旨在为产品经理和产品开发人员提供一个系统的知识框架&#xf…

张小明 2026/1/4 11:06:44 网站建设

烟台网站制作策划网站规划建设书

1. 参数与比特选择 在小模型设计中,首先需要在 低比特高参数 与 高比特低参数 之间进行权衡。我们提出的指导原则是: 优先选择 低比特高参数 的方案。原因在于:低比特表示能够显著降低存储与计算成本,而高参数量则保证了模型的表达…

张小明 2026/1/4 2:06:27 网站建设

网站是如何盈利的全国公示信用信息系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个PyTorch代码示例集合,展示softmax的不同应用方式:1. 基础用法(torch.nn.functional.softmax) 2. 带温度参数的softmax 3. 交…

张小明 2026/1/4 10:09:36 网站建设

响应式网站开发遇到的问题南庄做网站

调整鼠标的灵敏度可以显著提高使用体验,尤其是在玩游戏或进行精细操作时。合适的灵敏度不仅能提高工作效率,还能减少手腕和手指的疲劳感。那么,鼠标灵敏度怎么调呢?本文将为你分享如何调整鼠标灵敏度以及一些实用的方法技巧。 一、…

张小明 2026/1/5 19:26:21 网站建设

深圳建网站培训学校网站图片一般多大尺寸

1.概念 基本概念 线程池是一种多线程处理形式,它预先创建一组线程并管理它们,避免频繁创建和销毁线程带来的性能开销。 在 Linux 环境下,线程池(Thread Pool)是一种常用的并发编程模型,用于复用线程资源&…

张小明 2026/1/4 23:01:28 网站建设

温州网站建设服务器宁波营销网站建设

当别人还在用ChatGPT闲聊时,懂行的人已经用它改写了职业轨迹。 深夜,一位从事传统软件开发的工程师小李,在调试完最后一个API接口后,习惯性地点开了GitHub Trending。排行榜前列,与大模型相关的开源项目几乎占据了半壁…

张小明 2026/1/4 5:35:31 网站建设