深入理解JAVA虚拟机系列之垃圾收集器Parallel Scavenge 和 Parallel Old
一、简介
- 本文主要介绍Parallel Scavenge 和 Parallel Old 组合的垃圾收器的回收流程和GC日志,也提供了在线图形化页面参考;
二、回收流程
2.1 回收流程图
2.2 Parallel Scavenge
- Parallel Scavenge是一款吞吐量优先的新生代收集器,采用的是标记-复制算法,也是能够并行收集的多线程垃圾收集器;
- Parallel Scavenge的目标是达到一个可控制的吞吐量(Throughput), 而CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间;
- -XX:MaxGCPauseMilis参数是用来控制最大垃圾收集停顿时间的参数,允许的值是一个大于0的毫秒数,收集器将尽力保证内存回收花费的时间不超过用户设定值;该参数并非设置的越低越好,如果太低,虽说停顿时间小了,但是垃圾收集会变得更加频繁,同时也会导致吞吐量降下来;
- -XX:GCTimeRatio参数 TODO 这个参数书上写的有问题好像;TODO
- -XX:+UseAdaptiveSizePolicy参数是一个自适应调节策略参数,该参数被激活后,就不需要人工指定新生代的大小(-xmn),Eden与Survivor的比例了(-XX:SurvivorRatio)、晋升老年代对象大小(-XX:PretenureSizeThreshold)等细节参数了,虚拟机会根据档期那系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量。这种调节方式称为垃圾收集的自适应调节策略。
- 如果对于收集器运作不太了解,手工优化存在困难的话,使用Parallel Scavenge收集器配合自适应调节策略,把内存管理的调优任务交给虚拟机区完成也许是一个不错的选择,只需要把基本的内存数据设置好(如-Xmx设置最大堆),然后使用-XX:MaxGCPauseMilis参数(更关注最大停顿时间)或者-XX:GCTimeRatio(更关注吞吐量)参数给虚拟机设置一个优化目标,那具体细节参数的调节工作就由虚拟机完成了。
- 自适应调节策略也是Parallel Scavenge收集器区别于ParNew收集器的一个重要特性;
2.3 Parallel Old
- Parallel Old是Parallel Scavenge收集器的老年代版本,支持多线程并行收集,采用的是标记-整理算法;
- 和Parallel Scavenge一起组合共同实现吞吐量优先的垃圾收集,解决了之前Parallel Scavenge只能与Serial Old组合的尴尬境地;
2.4 吞吐量
- 所谓吞吐量就是处理器用于运行用户代码的时间与处理器消耗总时间的比值,即: 吞吐量 = 运行用户代码的时间/(运行用户代码的时间 + 运行垃圾收集时间)。如果虚拟机完成某个任务,用户代码加上垃圾收集总耗费了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%;
- 停顿时间越短就越适合需要与用户交互或需要保证服务响应质量的程序,良好的响应速度能提升用户体验;
- 高吞吐量则可以最高效率地利用处理器资源,尽快完成程序的运算任务,主要适合在后台运算而不太需要太多交互的分析任务;
三、GC日志分析
四、图形化参考
分类:
虚拟机
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)