JAVA编程【jvm垃圾回收的差异】
jvm垃圾回收的差异
JVM(Java Virtual Machine)的垃圾回收(GC)机制是自动管理内存的一种方式,能够帮助开发者释放不再使用的内存,避免内存泄漏和溢出等问题。不同的垃圾回收器(GC)有着不同的特点、适用场景以及性能差异。
1. 垃圾回收器分类
JVM垃圾回收器主要分为两大类:
串行垃圾回收器(Serial GC)
并行垃圾回收器(Parallel GC)
并发垃圾回收器(Concurrent GC)
混合垃圾回收器(如:G1 GC)
ZGC 和 Shenandoah GC(低延迟垃圾回收器)
2. 串行垃圾回收器(Serial GC)
串行垃圾回收器是最简单的垃圾回收器,所有的垃圾回收操作都是单线程完成的。
特点:
单线程执行:所有的垃圾回收操作(包括标记、清除、压缩)都由一个线程来完成。
适用于单核机器:在多核机器上可能存在性能瓶颈,因回收过程阻塞应用线程。
低内存占用:由于只使用一个线程,内存占用较小。
GC暂停时间较长:因为所有的回收都由一个线程执行,可能导致应用程序的停顿时间较长。
适用场景:
内存资源较为紧张、硬件性能较差,或者单核环境。
小型应用或者对GC延迟要求不高的场景。
启用方式:
java -XX:+UseSerialGC
3. 并行垃圾回收器(Parallel GC)
并行垃圾回收器通过多个线程来并行地执行垃圾回收过程,减少了垃圾回收的时间,适合多核环境。
特点:
多线程执行:垃圾回收过程中可以使用多个线程,并行执行标记、清理和整理操作。
吞吐量较高:能更好地利用多核CPU资源,适合计算密集型应用。
GC暂停时间较长:虽然多线程执行,但仍然是“停顿式”的,GC时应用线程会被暂停。
适用场景:
计算密集型应用(如批处理任务、大数据处理等)。
硬件资源丰富的服务器上,特别是在多核环境中。
启用方式:
java -XX:+UseParallelGC
4. 并发垃圾回收器(Concurrent Mark-Sweep GC, CMS GC)
CMS(Concurrent Mark-Sweep)垃圾回收器是为了减少垃圾回收的停顿时间而设计的。它在标记和清理阶段尽可能与应用线程并发执行。
特点:
低停顿:通过并发执行垃圾回收,尤其是在标记阶段和清理阶段,减少了应用停顿时间。
并发标记和清理:标记和清理过程与应用线程并行进行,因此GC停顿时间较短。
无法完全消除停顿:由于某些阶段仍然需要停顿(如重标记阶段),停顿时间不能完全消除。
内存碎片问题:由于没有压缩阶段,可能会导致内存碎片的出现。
适用场景:
对延迟敏感的应用(如Web服务器、实时系统)。
对停顿时间要求较高的场景。
启用方式:
java -XX:+UseConcMarkSweepGC
5. G1垃圾回收器(Garbage First GC)
G1(Garbage First)垃圾回收器是为大内存应用而设计的,它将堆划分为多个区域(Region),在垃圾回收时会优先清理回收成本较低的区域,从而减少停顿时间。
特点:
分区回收:将堆划分为多个小区域,每个区域都有不同的回收策略。
低停顿:通过优先回收成本较低的区域,控制每次垃圾回收的停顿时间。
混合回收:G1 采用了类似 CMS 的并发标记和清理,同时也进行并行回收,最后进行清理阶段时也尽可能减少停顿。
可控的停顿时间:通过 -XX:MaxGCPauseMillis 可以设定最大GC停顿时间,G1会尽量保证在这个时间内完成回收。
适用场景:
对响应时间要求较高的大型应用(如大数据系统、金融应用)。
内存较大(如8GB以上)的应用。
启用方式:
java -XX:+UseG1GC
6. ZGC 和 Shenandoah GC(低延迟垃圾回收器)
ZGC(Z Garbage Collector)和Shenandoah GC是两种低延迟垃圾回收器,专门设计用于极低的GC暂停时间,适合对延迟要求非常高的应用。
特点:
低延迟:ZGC 和 Shenandoah 都是为低延迟设计的,暂停时间几乎是常数级别的。
可伸缩性:两者都支持大规模堆(数TB内存),并且能在不中断应用的情况下进行垃圾回收。
并发标记和清理:标记、压缩等工作几乎都在应用线程运行时并发执行。
适用场景:
超低延迟要求的应用(如实时交易系统、在线支付系统)。
高可用、高并发的大型分布式应用。
启用方式:
java -XX:+UseZGC
java -XX:+UseShenandoahGC
7. JVM 垃圾回收器的差异总结

8. 选择合适的垃圾回收器
HikariCP 或 Apache DBCP 等性能要求较高的应用通常选择 并行GC 或 G1 GC。
对实时性要求较高的应用,如 金融系统 或 实时处理系统,可以使用 CMS GC、G1 GC 或 低延迟GC(ZGC/Shenandoah)。
内存较小、要求不高的小型应用可以选择 串行GC。
每种垃圾回收器有其特点和适用场景,选择合适的垃圾回收器不仅有助于优化应用性能,还能提高系统的稳定性和可维护性。
相关文章:
JAVA编程【jvm垃圾回收的差异】
jvm垃圾回收的差异 JVM(Java Virtual Machine)的垃圾回收(GC)机制是自动管理内存的一种方式,能够帮助开发者释放不再使用的内存,避免内存泄漏和溢出等问题。不同的垃圾回收器(GC)有…...
Elasticsearch:“Your trial license is expired”
目录标题 问题原因解决方案 问题 原因 ES的X-pack许可证是提供免费一个月的试用,到期之后就会报这个错误。 解决方案 查看license GET _license 开启试用license POST _xpack/license/start_trial?acknowledgetrue修改为基础license POST _xpack/license/start_…...
fmql之Linux WDT
正点原子第52章。 基础知识 正点原子教程 fmql-dts 代码 APP代码(不需要编写驱动代码) static int dw_wdt_drv_probe(struct platform_device *pdev) {struct device *dev &pdev->dev;struct watchdog_device *wdd;struct dw_wdt *dw_wdt; …...
【算法学习之路】7.链表算法
链表算法 前言一.原地逆置思路一:头插法思路二:双指针法思路3:递归 例题:1.头插法2.双指针法3,递归 二.双指针快慢指针:一个指针快一个指针慢例题1例题2 前言 我会将一些常用的算法以及对应的题单给写完&am…...
IDEA Commit 模态提交界面关闭VS开启对比
IDEA Commit 模态提交界面关闭VS开启对比 前言开启模态提交界面优点快捷且灵活的选择需要commit文件显示文件修改内容多(主观) 缺点在模态提交界面选择文件,临时关闭模态框重新打开会重置选择的commit文件 关闭模态提交界面优点允许在commit选择文件时查看其它没有修…...
【AI赋能】AI 工具生成视频教材:从创意到成品的全流程指南
AI 工具生成视频教材:从创意到成品的全流程指南 目标 通过本教材,您将学会如何利用 AI 工具(Grok、Sora、Speechify 和 CapCut)生成一个完整的视频,包括脚本生成、视频片段制作、字幕添加、音频生成以及最终剪辑合成…...
qt 操作多个sqlite文件
qt 操作多个sqlite文件 Chapter1 qt 操作多个sqlite文件1. 引入必要的头文件2. 创建并连接多个SQLite数据库3. 代码说明4. 注意事项 Chapter2 qt 多线程操作sqlite多文件1. 引入必要的头文件2. 创建数据库操作的工作线程类3. 在主线程中创建并启动多个工作线程4. 代码说明5. 运…...
WSL with NVIDIA Container Toolkit
一、wsl 下安装 docker 会提示安装 docekr 桌面版,所以直接安装 docker 桌面版本即可 二、安装 NVIDIA Container Toolkit NVIDIA Container Toolkit仓库 https://github.com/NVIDIA/nvidia-container-toolkitgithub.com/NVIDIA/nvidia-container-toolkit 安装…...
Vue 系列之:组件通讯
子组件调用父组件方法 1、直接在子组件中通过 this.$parent.event 来调用父组件的方法 父组件: <template><p><child></child></p> </template> <script>import child from ./child;export default {components: {chi…...
【Linux实践系列】:用c语言实现一个shell外壳程序
🔥本文专栏:Linux Linux实践项目 🌸博主主页:努力努力再努力wz 那么今天我们就要进入Linux的实践环节,那么我们之前学习了进程控制相关的几个知识点,比如进程的终止以及进程的等待和进程的替换,…...
STL map 的 lower_bound(x)、upper_bound(x) 等常用函数
【STL map 简介】 ● STL map 是一种关联容器,存储键值对,每个键(key value)是唯一的,而值(mapped value)可以重复。构建 STL map 时,无论元素插入顺序如何,STL map 中的…...
【A2DP】SBC 编解码器互操作性要求详解
目录 一、SBC编解码器互操作性概述 二、编解码器特定信息元素(Codec Specific Information Elements) 2.1 采样频率(Sampling Frequency) 2.2 声道模式(Channel Mode) 2.3 块长度(Block Length) 2.4 子带数量(Subbands) 2.5 分配方法(Allocation Method) 2…...
Computational Linguistics期刊全解析:领域顶刊的投稿指南与学术价值
在人工智能与语言学交叉融合的浪潮中,《Computational Linguistics》(CL)作为该领域的标杆期刊,始终是研究者发表前沿成果的首选平台。本文将从期刊影响力、投稿策略、收稿方向等角度,为学者提供一份全面的指南。 一、…...
【量化科普】Sharpe Ratio,夏普比率
【量化科普】Sharpe Ratio,夏普比率 🚀量化软件开通 🚀量化实战教程 在量化投资领域,夏普比率(Sharpe Ratio)是一个非常重要的风险调整后收益指标。它由诺贝尔经济学奖得主威廉F夏普(William…...
运行OpenManus项目(使用Conda)
部署本项目需要具备一定的基础:Linux基础、需要安装好Anaconda/Miniforge(Python可以不装好,直接新建虚拟环境的时候装好即可),如果不装Anaconda或者Miniforge,只装过Python,需要确保Python是3.…...
TikTok Shop欧洲市场爆发,欧洲TikTok 运营网络专线成运营关键
TikTok在欧洲的影响力还在持续攀升,日前,TikTok发布了最新的欧盟执行和使用数据报告,报告中提到: 2024年7~12月期间,TikTok在欧盟地区的月活用户达1.591亿,较上一报告期(2024年10月发布…...
基于YOLO11深度学习的电瓶车进电梯检测与语音提示系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
计算机毕业设计SpringBoot+Vue.js制造装备物联及生产管理ERP系统(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
微服务保护:Sentinel
home | Sentinelhttps://sentinelguard.io/zh-cn/ 微服务保护的方案有很多,比如: 请求限流 线程隔离 服务熔断 服务故障最重要原因,就是并发太高!解决了这个问题,就能避免大部分故障。当然,接口的并发…...
labelimg标注的xml标签转换为yolo格式标签
本文不生产技术,只做技术的搬运工!!! 前言 在yolo训练时,我们需要对图像进行标注,而使用labelimg标注时如果直接选择输出yolo格式的数据集,则原始数据的很多信息无法被保存,因此一版…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
