当前位置: 首页 > wzjs >正文

知名的设计网站百度客户服务中心

知名的设计网站,百度客户服务中心,网站建设qianhaiyou,使用的电脑做网站的服务器1. G1垃圾回收器G1(Garbage-First)垃圾回收器是Java HotSpot虚拟机中一种面向服务端应用的垃圾回收器,于JDK 7中首次推出,并在JDK 9及以后成为默认的垃圾回收器。内存布局区域划分:堆被划分为多个大小相等的Region(默认约2048个)每个Region可…

1. G1垃圾回收器

G1(Garbage-First)垃圾回收器是Java HotSpot虚拟机中一种面向服务端应用的垃圾回收器,于JDK 7中首次推出,并在JDK 9及以后成为默认的垃圾回收器

内存布局

  1. 区域划分

    • 堆被划分为多个大小相等的Region(默认约2048个)

    • 每个Region可以是Eden、Survivor或Old区

    • 还有一种特殊的Humongous区用于存储大对象(大小超过Region 50%的对象)

  2. 分代管理

    • 仍然保留分代概念,但物理上不再连续

    • 年轻代:一组Region(Eden+Survivor)

    • 老年代:另一组Region


2. G1的三个核心阶段

2.1 年轻代回收(Young GC) —— 一阶段

特点

  • STW(Stop-The-World):完全暂停应用线程

  • 触发条件:Eden区填满时自动触发

  • 目标:快速回收年轻代(Eden + Survivor区)

工作流程

  1. 根扫描:标记GC Roots直接引用的对象。

  2. 存活对象标记:通过可达性分析标记年轻代存活对象。

  3. 复制/晋升

    • 存活对象被复制到Survivor区(复制算法)

    • 达到晋升阈值(-XX:MaxTenuringThreshold)的对象晋升到老年代。

  4. 区域清空:回收后的Eden区和部分Survivor区被标记为空闲。

关键点

  • 仅处理年轻代Region,耗时短(通常几毫秒到几十毫秒)。

  • 通过-XX:G1NewSizePercent-XX:G1MaxNewSizePercent动态调整年轻代大小。

图示过程:

  • 初始时,所有区域都处于空闲状态
  • 创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象
  • 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程

E 表示:Eden 区

S 表示:Survivor 区

  • 随着时间流逝,伊甸园的内存又有不足
  • 将伊甸园以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代 


2.2 并发标记周期(Concurrent Marking Cycle)—— 二阶段

特点

  • 部分并发:大部分阶段与应用线程并发执行

  • 触发条件:老年代占用达到阈值(默认45%,通过-XX:InitiatingHeapOccupancyPercent调整)

  • 目标:全局标记堆中存活对象,确定回收优先级

分阶段流程

  1. 初始标记(Initial Mark,STW)

    • 短暂暂停,标记GC Roots直接关联的对象。

    • 通常与年轻代回收一起执行(借道Young GC)。

  2. 并发标记(Concurrent Mark)

    • 与应用线程并发,遍历整个堆,标记所有可达对象。

    • 使用SATB(Snapshot-At-The-Beginning)算法处理并发期间的对象变化。

  3. 最终标记(Remark,STW)

    • 处理并发标记期间漏标的对象(通过写屏障记录的变化)。

    • 引用处理(如清理软引用/弱引用)。

  4. 清理(Cleanup,STW)

    • 统计各Region的存活对象比例,排序回收价值(垃圾最多的优先)。

    • 不实际回收内存,但可能回收完全空闲的Region。

关键点

  • 并发标记周期为后续混合回收提供数据基础。

  • 通过-XX:ConcGCThreads可调整并发标记线程数。

图示过程:

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


2.3 混合回收(Mixed GC)—— 三阶段

特点

  • STW:暂停应用线程

  • 触发条件:并发标记周期完成后,老年代Region达到回收阈值

  • 目标:同时回收年轻代和部分老年代(选择垃圾比例高的Region)

工作流程

  1. 年轻代回收:与Young GC相同,处理Eden和Survivor区。

  2. 老年代回收

    • 根据并发标记的结果,选择垃圾比例最高的老年代Region(Garbage-First策略)。

    • 存活对象被复制到其他Region(压缩算法减少碎片)。

  3. 多次增量回收

    • 可能分多次完成老年代回收,每次回收部分Region以控制停顿时间。

关键点

  • 通过-XX:G1MixedGCLiveThresholdPercent设置Region存活对象阈值(默认85%,存活对象过多则跳过)。

  • 通过-XX:G1MixedGCCountTarget控制混合回收的批次(默认8次)。

图示过程:

  • 并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程。
  • 这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。
  • 此时不会对所有老年代区域进行回收,而是根据暂停时间目标优先回收价值高(存活对象少)的区域(这也是 Gabage First 名称的由来)

 混合收集阶段中,参与复制的有 eden、survivor、old

复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集


三阶段关系图 


Full GC(后备方案)

异常情况:Full GC

当G1无法满足回收需求(如并发模式失败或晋升失败)时,会退化为单线程的Serial Old GC(Full GC),导致长时间停顿。应通过调整参数(如增加堆大小、降低InitiatingHeapOccupancyPercent)避免。


3. 问题总结

3.1 三阶段总结

G1 通过这三个阶段的配合,实现了低延迟高吞吐的平衡,尤其适合大内存、多核CPU的场景。

阶段并发性目标触发条件
年轻代回收STW快速回收Eden/SurvivorEden区满
并发标记周期部分并发标记全堆存活对象,确定优先级老年代占用达阈值(默认45%)
混合回收STW回收年轻代+高垃圾老年代Region并发标记周期完成后

3.2 说一下G1垃圾回收?

  • 应用于新生代和老年代,在JDK9之后默认使用G1
  • 划分成多个区域,每个区域都可以充当eden,survivor,old,humongous其中 humongous 专为大对象准备
  • 采用复制算法
  • 响应时间与吞吐量兼顾
  • 分成三个阶段:年轻代回收(stw)、并发标记周期(重新标记stw)、混合回收
  • 如果并发失败(即回收速度赶不上创建新对象速度),会触发Full GC

上一篇   下一篇

http://www.dtcms.com/wzjs/189587.html

相关文章:

  • 网址备案查询郑州seo多少钱
  • 建设网站的五个步骤是百度seo排名360
  • dede怎么做网站友情链接的作用大不大
  • 河南做网站的公司百度一下你就知道首页
  • 网站用哪些系统做的软文撰写案例
  • 单产品网站建设北京关键词排名推广
  • 网站上推广游戏怎么做的网站建设的基本
  • 疯狗做网站cnfg短视频营销推广
  • 手机站网站建设站长统计app网站
  • 高唐住房建设局网站江苏seo平台
  • 怎么区分网站是模板做的2023今日新闻头条
  • 长春做网站wang如何让自己的网站被百度收录
  • 网站建设方案进行工期安排百度联盟个人怎么接广告
  • 市委宣传部网站百度知道问答
  • 长沙营销型网站建设制作百度整站优化
  • 揭阳网站制作平台windows优化大师下载安装
  • 广州市网站建设科技今天的新闻有哪些
  • java快速建站免费申请网站com域名
  • 电商平台网站建设多少钱厦门网络关键词排名
  • 河源网站优化淘宝推广运营
  • 福田汽车官网报价大全网站关键词排名优化客服
  • bootstrap建设淘宝网站爱站seo工具包官网
  • wordpress新版编辑器使用教程关键词营销优化
  • 做网站项目如何实现支付seo外链推广工具下载
  • 珠海网站建设找哪家抖音推广方案
  • 做技能培训和那个网站合作好seo学堂
  • b2b平台网站可以用响应式吗网站seo优化方法
  • ps做网站头部哈尔滨百度推广公司
  • 物流公司网站建设方案整站优化seo平台
  • 中企动力做网站关注公众号一单一结兼职