JVM之GC常见的垃圾回收器

收集器适用区域特点适用场景
Serial新生代单线程,STW(Stop-The-World)客户端小应用
Parallel Scavenge新生代多线程,吞吐量优先后台计算任务
ParNew新生代Serial 的多线程版配合 CMS 使用
CMS老年代并发标记,低延迟响应优先的系统
G1全堆分区域回收,平衡吞吐/延迟JDK9+ 默认
ZGC全堆超低延迟(<10ms)超大堆应用

1. Serial 收集器

  • 特点:单线程、STW(Stop-The-World)

  • 区域:新生代(复制算法)

  • 适用场景:客户端模式(如-client)、单核CPU

  • 参数-XX:+UseSerialGC

总结:简单高效,但停顿时间长。


2. ParNew 收集器

  • 特点:Serial 的多线程版本

  • 区域:新生代(复制算法)

  • 适用场景:配合CMS使用(JDK8及之前)

  • 参数-XX:+UseParNewGC

总结:多线程提升GC效率,但仍有STW。


3. Parallel Scavenge(吞吐量优先)

  • 特点:多线程、关注吞吐量(吞吐量 = 用户代码时间 / (用户代码时间 + GC时间)

  • 区域:新生代(复制算法)

  • 适用场景:后台计算型任务(如批量处理)

  • 参数-XX:+UseParallelGC

总结:适合不关心延迟,追求高吞吐的场景。


4. Serial Old 收集器

  • 特点:Serial 的老年代版本

  • 区域:老年代(标记-整理算法)

  • 适用场景:与Parallel Scavenge搭配或作为CMS后备

  • 参数-XX:+UseSerialOldGC(JDK9已移除)


5. Parallel Old 收集器

  • 特点:Parallel Scavenge 的老年代版本

  • 区域:老年代(标记-整理算法)

  • 适用场景:与Parallel Scavenge组合,吞吐量优先

  • 参数-XX:+UseParallelOldGC

总结:JDK8默认组合(Parallel Scavenge + Parallel Old)。


6. CMS(Concurrent Mark-Sweep)

  • 特点:并发标记清除、低延迟

  • 区域:老年代(标记-清除算法)

  • 流程

    1. 初始标记(STW)

    2. 并发标记

    3. 重新标记(STW)

    4. 并发清除

  • 缺点:内存碎片、并发模式失败(Concurrent Mode Failure)

  • 参数-XX:+UseConcMarkSweepGC(JDK14已移除)

总结:减少停顿时间,但内存碎片和CPU敏感。


7. G1(Garbage-First)

  • 特点:分区域(Region)收集、可预测停顿模型

  • 区域:全堆(标记-整理算法)

  • 流程

    1. 初始标记(STW)

    2. 并发标记

    3. 最终标记(STW)

    4. 筛选回收(STW)

  • 优势:平衡吞吐和延迟,适合大堆(JDK9+默认)

  • 参数-XX:+UseG1GC

总结:现代JVM首选,适合6GB以上堆内存。


8. ZGC(低延迟)

  • 特点:并发回收、停顿时间<10ms

  • 区域:全堆(染色指针+读屏障)

  • 适用场景:超大堆(TB级)、对延迟敏感

  • 参数-XX:+UseZGC(JDK15+生产可用)

总结:未来趋势,但需要较新JDK版本。


9. Shenandoah

  • 特点:类似ZGC,但开源实现

  • 优势:低停顿(与ZGC竞争)

  • 参数-XX:+UseShenandoahGC


对比总结

收集器目标算法适用场景
Serial/Serial Old简单复制/标记-整理单核、客户端
Parallel Scavenge高吞吐复制/标记-整理后台计算
CMS低延迟标记-清除老年代(JDK8及之前)
G1平衡标记-整理JDK9+默认,大堆
ZGC/Shenandoah超低延迟染色指针超大堆、敏感应用

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

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

相关文章

免费私有化部署! PawSQL社区版,超越EverSQL的企业级SQL优化工具面向个人开发者开放使用了

1. 概览 1.1 快速了解 PawSQL PawSQL是专注于数据库性能优化的企业级工具&#xff0c;解决方案覆盖SQL开发、测试、运维的整个流程&#xff0c;提供智能SQL审核、查询重写优化及自动化巡检功能&#xff0c;支持MySQL、PostgreSQL、Oracle、SQL Server等主流数据库及达梦、金仓…

HTTP/HTTPS与SOCKS5协议在隧道代理中的兼容性设计解析

目录 引言 一、协议特性深度对比 1.1 协议工作模型差异 1.2 隧道代理适配难点 二、兼容性架构设计 2.1 双协议接入层设计 2.2 统一隧道内核 三、关键技术实现 3.1 协议转换引擎 3.1.1 HTTP→SOCKS5转换 3.1.2 SOCKS5→HTTP转换 3.2 连接管理策略 3.2.1 智能连接池 …

3DGS——基础知识学习笔记

1.什么是3D高斯泼溅&#xff08;3D Gaussian Splatting&#xff09;&#xff1f; 目标&#xff1a;从一组稀疏的3D点&#xff08;比如通过相机或激光雷达采集的点云&#xff09;重建出高质量的3D场景&#xff0c;并支持实时渲染。 核心思想&#xff1a;用许多“3D高斯分布”&…

【C++】不推荐使用的std::allocator<void>

文章目录 不推荐使用的std::allocator<void>1. 核心区别2. 成员函数对比(1) allocate 和 deallocate(2) construct 和 destroy 3. 设计动机(1) std::allocator<T>(2) std::allocator<void> 4. 使用场景示例(1) std::allocator<int>(2) std::allocator&…

Go 语言云原生微服务全栈实战:Docker 镜像优化、K8s 编排与 Istio 流量治理

本系列文章将以 Go 语言为主导开发语言&#xff0c;系统性地讲解如何从零构建一个基于微服务架构的应用系统&#xff0c;涵盖以下核心模块&#xff1a; 使用 Go 构建高性能微服务构建精简且高效的 Docker 镜像利用 Kubernetes 进行微服务编排与部署通过 Istio 实现微服务的流量…

windows下authas调试tomcat

一般情况下&#xff0c;我们只需要输入以下代码 java -jar authas.jar调试tomcat时需要加上进程号 java -jar authas.jar <PID> 此外&#xff0c;如果你使用的是 Java 11 或更高版本&#xff0c;你需要添加 --add-opens 参数&#xff0c;以便 Arthas 能够访问 JVM 的内…

01_springboot中bean的生命周期

文章目录 bean的生命周期1. Bean定义阶段2. Bean实例化阶段3. 属性赋值阶段4. 初始化阶段5. 使用阶段6. 销毁阶段 bean的生命周期 在Spring Boot中&#xff0c;Bean的生命周期包括定义、实例化、属性赋值、初始化、使用和销毁等阶段。下面我将详细解释这些阶段&#xff0c;并提…

Oracle基础知识

目录 1.别名的使用 2.AND的优先级高于OR 3.where后面可以接别名&#xff0c;order by后面不可以 4.Oracle中SQL的执行顺序(重点) 5.dual万用表 6.是否区分大小写 7.Oracle常用数据类型 8.Oracle常用函数 (1)length字符、lengthb字节和cast强制类型转换 (2)数据类型转…

React 播客专栏 Vol.13|样式不难搞,Tailwind CSS 与 SVG 实战入门

&#x1f44b; 欢迎回到《前端达人 React 播客书单》第 13 期&#xff08;正文内容为学习笔记摘要&#xff0c;音频内容是详细的解读&#xff0c;方便你理解&#xff09;&#xff0c;请点击下方收听 视频版&#xff1a; 文字版&#xff1a; 今天我们进入样式化的实战环节&…

matlab慕课学习3.5

于20250520 3.5 用while 语句实现循环结构 3.5.1while语句 多用于循环次数不确定的情况&#xff0c;循环次数确定的时候用for更为方便。 3.5.2break语句和continue语句 break用来跳出循环体&#xff0c;结束整个循环。 continue用来结束本次循环&#xff0c;接着执行下一次…

鸿蒙开发进阶:深入解析ArkTS语言特性与开发范式

一、前言 在鸿蒙生态开发体系中&#xff0c;DevEco Studio作为核心开发工具为开发者提供了高效的集成环境。而在掌握工具使用之后&#xff0c;深入理解鸿蒙开发语言成为构建高质量应用的关键。本文将聚焦于鸿蒙系统的核心开发语言——ArkTS&#xff0c;全面解析其起源演进、声…

P2P最佳网络类型

跑P2P最佳的网络类型是什么&#xff1f;全锥型NAT1网络它属于最宽松的网络环境&#xff0c;IP和端口都没有限制&#xff0c;穿透率在95%以上&#xff0c;P2P连接成功率极高。使用全锥型网络的节点收益比其他受限网络类型高出3倍左右&#xff0c;能显著提升PCDN的跑量和收益。 其…

电子制造企业智能制造升级:MES系统应用深度解析

在全球电子信息产业深度变革的2025年&#xff0c;我国电子信息制造业正经历着增长与转型的双重考验。据权威数据显示&#xff0c;2025年一季度行业增加值同比增长11.5%&#xff0c;但智能手机等消费电子产量同比下降1.1%&#xff0c;市场竞争白热化趋势显著。叠加关税政策调整、…

在nextjs项目当中使用wagmi连接MetaMask SDK

Wagmi 是一个为以太坊和 EVM 兼容链构建的 React Hooks 库,专为简化 Web3 应用开发而设计。它提供了一组强大且类型安全的工具,使开发者能够更方便地与钱包(如 MetaMask、WalletConnect 等)和智能合约进行交互。 Wagmi 的全称其实并不是一个传统意义上的缩写,它源自加密社…

DeepSeek+PiscTrace+YOLO:迅速实现Mask掩码抠图

在计算机视觉任务中&#xff0c;特别是在目标检测和实例分割中&#xff0c;我们常常需要从图像中提取特定的目标区域。这可以通过使用目标检测模型&#xff08;如 YOLOv8&#xff09;获得的检测框&#xff08;bounding boxes&#xff09;和掩码&#xff08;masks&#xff09;来…

超级维特根斯坦

AI智能体核心指令:语言智慧融合体 - 深度思辨、专业应用与协同创新大师 1. 角色设定 (Persona) 你将扮演一位“语言智慧融合体”AI,一个集大成的、具备卓越情境智能、精妙引导艺术与长时程战略规划能力的语言思想、艺术与应用科学伙伴。你的核心人格与方法论基于以下杰出贡…

CentOS Stream安装MinIO教程

1. 下载 MinIO 二进制文件 # 进入 MinIO 安装目录 sudo cd /usr/local/bin/# 下载 MinIO 二进制文件&#xff08;替换为最新版本链接&#xff09; wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio2. 创建专用用户和存储目录 # 创建 minio 用户…

Android7 Input(八)App Input事件接收器InputEventReceiver

概述 上一个章节&#xff0c;我们讲解了App如何使用InputChannel通道与input系统服务建立通信的桥梁的过程&#xff0c;本章我们讲述App如何从input系统服务中获取上报的输入事件&#xff0c;也就是我们本章讲述的InputEventReceiver。 本文涉及的源码路径 frameworks/base/c…

VS2017编译librdkafka 2.1.0

VS2017编译librdkafka 2.1.0 本篇是 Windows系统编译Qt使用的kafka(librdkafka)系列中的其中一篇,编译librdkafka整体步骤大家可以参考: Windows系统编译Qt使用的kafka(librdkafka) 由于项目需要,使用kafka,故自己编译了一次,编译的过程,踩了太多的坑了,特写了本篇…

第 1 章:数字 I/O 与串口通信(GPIO UART)

本章目标: 掌握 GPIO 的硬件原理、寄存器配置与典型驱动框架 深入理解 UART/USART 的帧格式、波特率配置、中断与 DMA 驱动 通过实战案例,将 GPIO 与 UART 结合,实现 AT 命令式外设控制 章节结构 GPIO 概述与硬件原理 GPIO 驱动实现:寄存器、中断与去抖 UART/USART 原理与帧…