JVM专题十二:JVM 中的收集器二

上一篇JVM专题十一:JVM 中的收集器一咱们介绍了垃圾收集器的分类,已经主流的分代垃圾收集器重点看了CMS与三色标记算法,本篇咱们继续来看意G1、ZGC等。

G1收集器

G1(Garbage-First Garbage Collector)是一种服务器端的垃圾收集器,专为大堆内存和低延迟垃圾收集设计。以下是G1收集器的关键特性和工作模式的概述:

G1收集器关键特性

  1. 分代收集:G1将堆内存分为多个大小相等的区域(Region),每个Region可以是Eden、Survivor或Old区。

    • 可以通过-XX:G1HeapRegionSize=n设置Region大小。
  2. 大对象处理:大对象(超过Region大小50%的对象)会被放入专门的Humongous区。

    • 大对象可能横跨多个Region。
  3. 增量回收:G1可以逐步、增量地执行垃圾回收,有助于控制停顿时间。

  4. 并行回收:G1可以利用多核CPU并行回收垃圾,提高回收速度。

  5. 标记-整理算法:老年代回收使用标记-整理算法,避免内存碎片化。

    • 新生代回收使用复制算法。
  6. STW(Stop the World):G1在垃圾回收时仍需STW,但增加了预测机制来控制停顿时间。

  7. 停顿时间预测:用户可以通过-XX:MaxGCPauseMillis指定期望的停顿时间。

G1收集器工作模式

  1. Young GC:当Eden区内存不足时触发,回收新生代Region。

  2. Mixed GC:当老年代空间占比超过-XX:InitiatingHeapOccupancyPercent设定的阈值时触发,回收年轻代和部分老年代Region。

    • 采用复制算法。
  3. Full GC:当老年代空间不足且-XX:G1HeapWastePercent设定过低时可能触发,进行整个堆的回收。

G1收集器参数设置

G1收集器参数设置 -XX:+UseG1GC:使用G1收集器-XX:ParallelGCThreads:指定GC工作的线程数量-XX:G1HeapRegionSize:指定分区大小(1MB~32MB,且必须是2的N次幂),默认将整堆划分为2048个分区-XX:MaxGCPauseMillis:目标暂停时间(默认200ms)-XX:G1NewSizePercent:新生代内存初始空间(默认整堆5%,值配置整数,默认就是百分比)-XX:G1MaxNewSizePercent:新生代内存最大空间-XX:TargetSurvivorRatio:Survivor区的填充容量(默认50%),Survivor区域里的一批对象(年龄1+年龄2+年龄n的多个年龄对象)总和超过了Survivor区域的50%,此时就会把年龄n(含)以上的对象都放入老年代-XX:MaxTenuringThreshold:最大年龄阈值(默认15)-XX:InitiatingHeapOccupancyPercent:老年代占用空间达到整堆内存阈值(默认45%),则执行新生代和老年代的混合收集(MixedGC),比如我们之前说的堆默认有2048个region,如果有接近1000个region都是老年代的region,则可能就要触发MixedGC了-XX:G1MixedGCLiveThresholdPercent(默认85%)  region中的存活对象低于这个值时才会回收该region,如果超过这个值,存活对象过多,回收的的意义不大。-XX:G1MixedGCCountTarget:在一次回收过程中指定做几次筛选回收(默认8次),在最后一个筛选回收阶段可以回收一会,然后暂停回收,恢复系统运行,一会再开始回收,这样可以让系统不至于单次停顿时间过长。-XX:G1HeapWastePercent(默认5%): gc过程中空出来的region是否充足阈值,在混合回收的时候,对Region回收都是基于复制算法进行的,都是把要回收的Region里的存活对象放入其他Region,然后这个Region中的垃圾对象全部清理掉,这样的话在回收过程就会不断空出来新的Region,一旦空闲出来的Region数量达到了堆内存的5%,此时就会立即停止混合回收,意味着本次混合回收就结束了。

G1收集器优化建议

G1垃圾收集器的优化主要集中于平衡GC的频率和停顿时间,以及管理新生代和老年代之间的对象晋升。以下是一些针对G1收集器的优化建议:

  1. 合理设置-XX:MaxGCPauseMillis:这个参数定义了G1试图达到的最大GC停顿时间。如果设置得过高,可能会导致年轻代GC不频繁,从而在触发时有大量对象存活并晋升到老年代。相反,如果设置得过低,可能会导致GC过于频繁,影响整体性能。

  2. 监控年轻代GC后的存活对象:监控每次年轻代GC后存活下来的对象数量,以评估当前的GC策略是否有效。如果存活对象过多,可能需要调整-XX:MaxGCPauseMillis或其他相关参数。

  3. 调整新生代大小:通过-XX:G1NewSizePercent-XX:G1MaxNewSizePercent参数调整新生代的大小,以适应应用的特定需求。确保新生代足够大,可以容纳大部分短暂存活的对象,减少对象晋升到老年代的频率。

  4. 监控Survivor区使用情况:Survivor区溢出是对象晋升到老年代的一个常见原因。如果Survivor区频繁溢出,可能需要增加其大小或调整其他参数。

  5. 使用动态年龄判定规则:G1使用动态年龄判定规则来决定对象何时晋升到老年代。监控这一规则的效果,并根据应用的行为调整-XX:TargetSurvivorRatio-XX:MaxTenuringThreshold参数。

  6. 避免频繁的Mixed GC:频繁的Mixed GC可能会影响性能。通过调整参数,尽量使Mixed GC在必要时才触发,并且每次回收的Region数量能够有效地控制停顿时间。

  7. 监控和优化Full GC:虽然G1旨在减少Full GC的发生,但在某些情况下仍然可能触发。监控Full GC的发生频率,并优化堆空间使用,以减少Full GC的影响。

  8. 使用G1收集器的调优工具:使用JVM提供的工具,如GC日志和JVM监控工具,来分析GC行为并进行调优。

  9. 考虑应用特定行为:不同的应用可能有不同的内存分配模式和GC需求。根据应用的具体行为来调整G1的参数,以达到最优性能。

  10. 测试和评估:在不同的负载和条件下测试G1的参数设置,评估其对性能的影响,并根据测试结果进行调整。

通过细致地调整和监控G1收集器的参数,可以优化垃圾收集的性能,减少GC引起的停顿时间,提高应用的响应速度和吞吐量。

G1收集器适用场景

  • 大堆内存应用(8GB以上)。
  • 对象分配和晋升速度变化大。
  • 需要低延迟和可预测停顿时间的垃圾收集。

G1收集器通过其创新的Region划分和垃圾收集策略,为现代Java应用提供了一种有效的垃圾收集解决方案,尤其适用于大堆内存和对延迟敏感的应用场景。通过合理的参数设置和监控,G1可以显著提高应用的性能和响应性。

ZGC收集器

ZGC(The Z Garbage Collector)是Java虚拟机(JVM)在JDK 11中引入的一种实验性质的低延迟垃圾收集器,专为大内存和低延迟服务设计。以下是对ZGC收集器特性和工作过程的整理:

ZGC关键特性

  • 低延迟目标:最大GC停顿时间不超过10ms。
  • 大堆支持:设计用于支持TB级别的内存容量,当前支持8MB到4TB,未来可支持16TB。
  • 与堆大小无关的停顿时间:停顿时间不随堆大小或活跃对象大小的增加而增长。
  • 指针染色(Colored Pointer):在对象指针中嵌入额外的位来存储对象的状态信息,如是否被移动或存活状态。
  • 读屏障(Load Barrier):在对象访问时插入的特殊检查,用于确保访问的正确性,并处理对象移动后的指针更新。

内存布局

  • 采用基于Region的内存布局,但与G1不同,ZGC的Region不分代。
  • 64位虚拟地址空间划分为多个子空间,包括Java堆、M0地址空间、M1地址空间和Remapped空间。

工作过程

ZGC周期由三个STW(Stop-The-World)暂停和四个并发阶段组成:

  1. 标记开始(Mark Start):初始标记GC Roots直接可达的对象。
  2. 重新映射开始(Relocation Start):选择将要清理的内存区域,并建立数据结构以进行对象移动。
  3. 并发标记/重新映射 (M/R):并发遍历对象图,标记所有可达的对象,并更新指向移动对象的引用。
  4. 并发引用处理 (RP):处理软引用、弱引用等特殊引用类型。
  5. 并发转移准备 (EC):确定哪些内存区域将被清理,并准备数据结构。
  6. 并发转移 (RE):将存活的对象从旧位置移动到新位置,应用程序可继续运行。

优势

  • 利用指针染色和读屏障技术,实现几乎整个垃圾收集过程的并发执行,显著降低停顿时间。
  • 支持大容量内存,适用于未来大规模内存需求的应用。

局限性

  • 由于采用“空间换时间”的策略,可能会占用更多的地址空间。
  • 目前仅支持64位系统,不支持32位系统和压缩指针。

参数设置

类别配置选项说明
通用GC选项-XX:MinHeapSize 或 -Xms设置JVM堆的最小大小。
-XX:InitialHeapSize设置JVM堆的初始大小。
-XX:MaxHeapSize 或 -Xmx设置JVM堆的最大大小。
-XX:SoftMaxHeapSize设置堆大小的软限制,达到此值可能会触发GC。
-XX:ConcGCThreads设置并发垃圾收集的线程数量。
-XX:ParallelGCThreads设置并行垃圾收集的线程数量。
-XX:UseLargePages启用大页内存支持,提高内存分配效率。
ZGC特定选项-XX:+UnlockExperimentalVMOptions解锁实验性VM选项。
-XX:+UseZGC启用Z Garbage Collector。
-XX:ZAllocationSpikeTolerance设置分配峰值的容忍度。
-XX:ZCollectionInterval设置ZGC的垃圾收集间隔。
-XX:ZFragmentationLimit设置ZGC堆碎片的容忍度。
-XX:ZMarkStackSpaceLimit设置ZGC标记阶段堆栈空间的限制。
-XX:ZUncommit控制ZGC是否取消提交未使用的内存区域。
-XX:ZUncommitDelay设置ZGC取消提交内存的延迟时间。
ZGC诊断选项-XX:+UnlockDiagnosticVMOptions解锁诊断VM选项。
-XX:zStatisticsInterval设置ZGC统计信息输出的间隔。
-XX:ZVerifyForwarding启用ZGC转发指针的验证。
-XX:ZVerifyMarking启用ZGC标记阶段的验证。
-XX:ZVerifyobjects启用ZGC对象的验证。
-XX:ZVerifyRoots启用ZGC根对象的验证。
-XX:ZVerifyViews启用ZGC视图的验证。
-xx:zProactive启用ZGC的主动垃圾收集策略。
其他选项-XX:UseNUMA启用对非统一内存访问(NUMA)架构的支持。
-XX:UseTransparentHugePages启用透明大页内存支持。
-XX:SoftRefLRUPolicyMSPerMB设置软引用的LRU策略,与每MB内存相关的时间。
堆分配选项-XX:AllocateHeapAt控制JVM堆分配的内存地址。

请注意,某些配置选项可能需要根据具体的JVM实现和版本进行调整。在使用这些选项时应参考官方文档,并在生产环境中进行充分测试。

触发机制

  • 支持定时触发、预热触发、分配速率触发和主动触发。

小结

ZGC通过其创新的垃圾收集策略和技术,实现了在大堆内存上的低延迟垃圾收集,特别适用于对延迟敏感的大规模应用。随着JDK版本的更新,ZGC有望得到进一步的优化和性能提升。尽管存在一些局限性,ZGC的设计理念和实现技术为Java垃圾收集器的发展提供了新的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些小项目使用它&a…

如何提高软件APP质量的测试类型

如今,由于市场竞争非常激烈,移动应用质量至关重要。我们需要关注用户体验以及应用的性能。如果应用包含错误,应用评级就会下降,应用下载量也会下降。如果我们能使我们的应用没有错误,那么应用获得人气的机会就会增加。…

通过颜色传感器控制机械臂抓物体

目录 1 绪论 2整体设计方案 2.1 系统的介绍 2.2 抓取模块 2.2.1 机械臂的定义 2.2.2 机械臂的分类 2.2.3 机械臂的选用 2.3 颜色识别模块 2.3.1 颜色传感器识别原理 2.3.2 TCS3200简介 2.4 整体控制方案 3 颜色识别抓取系统的硬件设计 3.1 单片机选型及参数 3.2 系…

win11系统重装?正版系统Windows11安装重启!保姆级重装系统攻略!

随着科技的不断发展,Windows 11系统已经逐渐成为了众多电脑用户的新选择。然而,当当电脑出现严重故障、受到病毒攻击、软件冲突、系统升级失败、硬件更换或升级、系统性能下降或个性化需求等情况时,重装系统可能是一个有效的解决方案。本文将…

构建网络图 (JavaScript)

前序:在工作中难免有一些千奇百怪的需求,如果你遇到构建网络图,或者学习应对未来,请看这边文章,本文以代码为主。 网络图是数据可视化中实用而有效的工具,特别适用于说明复杂系统内的关系和连接。这些图表…

【十六】【QT开发应用】Menu菜单,contextMenuEvent,setContextMenuPolicy,addAction

在 Qt 框架中,QMenu 类用于创建和管理菜单。菜单是用户界面的一部分,可以包含多个选项或动作,用户可以选择这些选项来执行特定的功能。菜单通常显示在菜单栏、上下文菜单(右键菜单)或工具栏中。 基本用法 创建菜单对象…

深入解读一下 `com.google.android.material.appbar.CollapsingToolbarLayout`

简介 在现代 Android 应用中,提供流畅且美观的用户体验是非常重要的。CollapsingToolbarLayout 是 AndroidX库中 Material Components 的一部分,它提供了一种易于实现的可折叠工具栏效果,常用于提供视觉吸引力的标题栏和动画效果。 本文将详…

项目1111

中文显示姓名列和手机号 SELECT contact_name AS 姓名, contact_phone AS 手机号 FROM 2_公司id; 使用explain测试给出的查询语句,显示走了索引查询 EXPLAIN SELECT * FROM 7_订单数量 WHERE countid LIKE e%; 统计用户订单信息,查询所有用户的下单数量…

Prometheus中添加基本身份验证功能

在Prometheus中添加基本身份验证功能,可以按照以下步骤进行: 一、生成哈希密码 首先,需要安装bcrypt工具,用于生成哈希密码。这可以通过Python的bcrypt库来完成。如果未安装,可以使用pip进行安装。 创建一个Python脚…

Android性能优化——卡顿优化

文章目录 一、从XML到屏幕上的展示造成跳帧的因素有那些发现问题定位问题定位代码 一、从XML到屏幕上的展示 数据加载阶段 数据控制阶段 数据展示阶段 xml —> view onCreat —> 解析layout.xml resume —> view —> wms ViewRootImpl UI 绘制流程 :测…

计算机网络之数据通信原理

1.通信系统的基本组成 信源:信息的发出者; 信宿:信息的接收者; 载体:信息的传送通道; 变换器:将信息变换成载体上可传输的信号; 反变换器:将载体上传输的信号变换成信…

SpringBoot集成Druid数据库连接池并配置可视化界面和监控慢SQL

pom.xml <!-- Druid 数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.23</version></dependency>application.yml spring:jackson:date-…

明星周边物品交易购物系统

摘 要 随着明星文化的兴起和粉丝经济的蓬勃发展&#xff0c;明星周边产品的市场需求日益增长。明星周边物品包括各种与明星相关的商品&#xff0c;如T恤、海报、手办、签名照等&#xff0c;它们成为粉丝们表达对明星喜爱和支持的方式之一。通过“星光璀璨”来形象化地表达明星…

基于Java技术的在线学习平台系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;基于SpringBoot框架 工具&#xff1a;Eclipse、Navicat、M…

Qt 学习(一) addressbook

Qt Demo: addressbook (1)创建项目&#xff1a;选择不创建界面&#xff0c;即UI&#xff0c;此时会自动生成的文件如图所示&#xff1a; QApplication&#xff1a; MainWindow 继承自 QMainWindow&#xff0c;根据需要设计的界面样式。 (2)确定MainWindow 的成员变量 首先&…

Jetpack架构组件_Navigaiton组件_1.Navigaiton切换Fragment

1.Navigation主要作用 方便管理Fragment &#xff08;1&#xff09;方便我们管理Fragment页面的切换 &#xff08;2&#xff09;可视化的页面导航图&#xff0c;便于理清页面间的关系。 &#xff08;3&#xff09;通过destination和action完成页面间的导航 &#xff08;4&a…

算尽天下财,铸就大明梦 —— 大明钱算子夏元吉的传奇一生

仕途生涯开始&#xff1a;洪武二十三年&#xff08;1390年&#xff09;&#xff0c;夏元吉因精通《诗经》&#xff0c;由湖广乡荐参加礼部组织的会试&#xff0c;虽未中举&#xff0c;但他并未气馁&#xff0c;反而更加努力地学习。洪武二十四年&#xff08;1391年&#xff09;…

通讯:单片机串口和电脑通讯

目录 1.串口输出数据到电脑 硬件部分 串口输出数据到电脑的软件软件部分&#xff1a; 相关问题&#xff1a; 2.单片机串口--485--485转USB--电脑 串口&#xff0c;芯片&#xff0c;转换器&#xff0c;设备之间的通讯的接线&#xff0c;都是要TX--RX, RX--TX 交叉连接。 单…

充电桩现场安装施工流程

摘要&#xff1a;在化石能源日益紧缩的今天&#xff0c;新能源车辆逐渐走进了千家万户&#xff0c;与传统化石能源车辆相比&#xff0c;以电驱动的新能源车辆能源利用率高&#xff0c;缩短了能源传递过程&#xff0c;实现了能源有效利用。根据能量守恒定律可知&#xff0c;任何…

V-Series Avalon-MM DMA Interface for PCIE IP核

目录 1. IP概述 2. Avalon-MM DMA Ports 3. 参数设置 3.1 系统设置 3.2 基址寄存器 (BAR) 设置 3.3 设备识别寄存器 3.4 PCI Express和PCI功能参数 3.4.1 Device Capabilities 3.4.2 Error Reporting 3.4.3 Link Capabilities 3.4.4 MSI and MSI-X Capabilities …