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)有…...
VBA信息获取与处理第五节:如何在单个工作表中查找某个给定值
《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互…...
linux一些使用技巧
linux一些使用技巧 文件名称和路径的提取切换用户执行当前脚本一行演示单引号与双引号的使用curl命令仅输出响应头信息,不输出body体文件名称和路径的提取 文件路径为 /tmp/tkgup/test.sh 方式获取文件名获取文件路径获取文件全路径方式一basename ${file}dirname ${file}real…...
ubuntu20.04 安装离线版docker-20.10.0
1. 安装步骤 步骤一:官网下载 docker 安装包 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz步骤二:解压安装包; tar -zxvf docker-20.10.0.tgz 步骤三:将解压之后的docker文件移到 /usr/bin目录下; c…...
K8s 1.27.1 实战系列(一)准备工作
一、准备服务器 主机IP 操作系统计算资源 说明 192.168.202.23 CentOS74核8G内存50G硬盘 k8s-master 192.168.202.24 CentOS74核8G内存50G硬盘 k8s-node1 192.168.202.25 CentOS74核8G内存50G硬盘 k8s-node2 二、准备环境(所有节点) 1、关闭防火墙&…...
【推荐算法】python游戏数据分析可视化推荐系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
目录 一、项目背景 二、项目拟解决问题 (1)数据价值断层 (2)用户画像模糊 (3)推荐策略单一 (4)决策可视化缺失 三、研究目的 (1)轻量化服务架构验证 …...
一文读懂深度学习中的损失函数quantifying loss —— 作用、分类和示例代码
在深度学习中,quantifying loss(量化损失)是指通过数学方法计算模型预测值与真实值之间的差异,以衡量模型的性能。损失函数(Loss Function)是量化损失的核心工具,它定义了模型预测值与真实值之间…...
Vue 3 整合 WangEditor 富文本编辑器:从基础到高级实践
本文将详细介绍如何在 Vue 3 项目中集成 WangEditor 富文本编辑器,实现图文混排、自定义扩展等高阶功能。 一、为什么选择 WangEditor? 作为国内流行的开源富文本编辑器,WangEditor 具有以下优势: 轻量高效:压缩后仅…...
筑牢网络安全防线:守护您的数据安全
在数字化时代,数据安全已成为企业和个人不容忽视的重要议题。近日印尼国家数据中心遭黑客袭击的事件,不仅扰乱了机场的移民检查,还影响了众多机构的服务运行。黑客利用恶意软件对数据中心进行攻击,索要巨额赎金,给印尼…...
基于Asp.net的农产品销售管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
android11使用gpio口控制led状态灯
目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求:这里是用2个gpio口来控制LED灯,开机时默认亮蓝灯,按开机键,休眠亮红灯,唤醒亮蓝灯。 原理图: 这里由于主板上电阻R63…...
解决最长无重复子串问题
在编程面试中,字符串处理常常是考察算法能力的重要部分。今天,我们将探讨一个经典问题——最长无重复子串问题,并给出 Python 代码实现。 问题描述 给定一个字符串 s,你需要找到其中最长的无重复字符的子串,并返回它…...
ASP .NET Core 学习(.NET9)Serilog日志整合
Serilog 是一个功能强大的 .NET 日志库,以其简洁的配置和灵活的输出方式而受到开发者喜爱。支持多种日志输出目标(如控制台、文件、数据库等),并且可以通过结构化日志的方式记录丰富的上下文信息,便于后续的日志分析和…...
基于python+flask+mysql的川渝地区天气数据分析系统
系统首页 天气数据分析 历史天气数据查询 python爬虫代码展示 import requests import re import time as delay from bs4 import BeautifulSoup import pandas as pd import pymysql import json# 定义一个函数,用于获取网页的源代码 def get_page(url, headers)…...
一个结合创意与技术的Python数据可视化案例,展示动态3D粒子轨迹图与热力图的融合效果,代码包含注释与关键技术点解析
以下是一个结合创意与技术的Python数据可视化案例,展示动态3D粒子轨迹图与热力图的融合效果,代码包含注释与关键技术点解析: import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.animation import Fu…...
【Linux———信号精讲】
你是怎么做到的,给了她想要的爱............................................................................................ 文章目录 前言 一、【信号入门】 1.1、【生活角度的信号】 1.2、【ctrl c与z】 1.3、【信号的发送与记录】 1.4、【信号处理常见方式…...
scBaseCamp:一个AI代理的可持续扩充的单细胞数据存储库
scBaseCamp是Tahoe-100M:最大规模的单细胞扰动数据集的后续 构建虚拟细胞是人工智能与生物学交叉领域的新兴前沿方向,单细胞RNA测序数据的快速增长为这一领域提供了助力。通过整合数百项研究中数百万个细胞的基因表达谱,单细胞图谱为训练由 …...
GPTs+RPA赋能智慧校园:构建下一代教育智能体的技术实践
文章目录 一、核心应用场景与技术融合1. 教务流程自动化(RPAGPTs双引擎驱动)2. 智能问答中枢(NLP流程自动化) 二、关键技术实现方案1. 多模态数据处理架构2. 智能文档处理流水线 三、典型系统架构设计智慧校园AI中台架构ÿ…...
Linux 系统不同分类的操作命令区别
Linux 系统有多种发行版,每种发行版都有其独特的操作命令和工具。以下是一些常见的分类及其操作命令的区别: 1. 基于 Red Hat 的发行版 (RHEL, CentOS, Fedora) 1.1 包管理 安装软件包: bash复制 sudo yum install <package> 更新软件包: bash复制 sudo yum update…...
集成的背景与LLM集成学习
文章目录 集成的背景与LLM集成学习LLVM集成指南Azure OpenAl集成Hugging Face Hub集成集成的背景与LLM集成学习 任何新的技术框架或工具,往往需要对其背后的原理和历史背景有所了解,这样可以更好地掌握它的应用方式和最佳实践。在探讨为什么学习LangChain的集成项目之前,先看…...
【AIGC】通义万相 2.1 与蓝耘智算:共绘 AIGC 未来绚丽蓝图
一、引言 在人工智能技术迅猛发展的今天,AIGC(生成式人工智能内容生成)领域正以惊人的速度改变着我们的生活和工作方式。从艺术创作到影视制作,从广告设计到智能客服,AIGC 技术的应用越来越广泛。通义万相 2.1 作为一…...
【AIGC实战】蓝耘元生代部署通义万相2.1文生图,结尾附上提示词合集
文章目录 👏什么是文生图?👏通义万相2.1文生图👏蓝耘元生代部署通义万相2.1👏平台注册👏部署通义万相2.1👏使用通义万相2.1文生图 👏提示词合集👏总结 随着人工智能生成内…...
Gartner:数据安全平台DSP提升数据流转及使用安全
2025 年 1 月 7 日,Gartner 发布“China Context:Market Guide for Data Security Platforms”(《数据安全平台市场指南——中国篇》,以下简称指南),报告主要聚焦中国数据安全平台(Data Securit…...
数据结构与算法:双指针
前言 双指针其实和滑动窗口差不多,但能使用的场景比滑动窗口更广功能更强。滑动窗口的内容在我上一篇文章数据结构与算法:滑动窗口。 一、原理 双指针的关键还是分析题目单调性,从而保证指针可以单方向滑动。 二、题目 1.按奇偶排序数组…...
Leetcode 57: 插入区间
Leetcode 57: 插入区间 问题描述: 给定一个非重叠的区间集合 intervals(按开始时间升序排列)和一个新的区间 newInterval,将新的区间插入到区间集合中并合并重叠的部分,最后返回结果区间集合。 适合面试的解法&#x…...
NLP如何训练AI模型以理解知识
一、自然语言处理(NLP)的定义与核心目标 1. 什么是自然语言处理? NLP是计算机科学与人工智能的交叉领域,旨在让机器具备以下能力: • 理解:解析人类语言(文本或语音)的语法、语义和…...
android13为账号密码做文件存储功能
注册获取外存权限 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" />申请文件存入外存权限 // Activity中 // 1. 申请PackageManag…...
Excel的行高、列宽单位不统一?还是LaTeX靠谱
想要生成田字格、米字格、带拼音标准,方便小学生书法和练字。Word,Excel之类所见即所得是最容易相当的方式。但它们处理带田字格之类背景时,如果没有专用模板、奇奇怪怪的插件,使用起来会碰到各种问题。比如,Word里面用…...
【JavaSE-5】程序逻辑控制相关练习题
1、判断一个数字是否是素数(质数) //方法1: import java.util.Scanner; public static void main(String[] args) {//判断一个数字是否是素数:除了1和它本身外没有其他数可以整除Scanner scan new Scanner(System.in);int num scan.nextInt();boolean flag tru…...
MyBatis-Plus 条件构造器的使用(左匹配查询)
在上一篇文章中,我们已经介绍了 MyBatis-Plus 条件构造器,包括 QueryWrapper 和 UpdateWrapper 的基本使用方法、常见查询条件(如等于、不等于、大于、小于)以及如何使用 Lambda 表达式来构建动态查询和更新条件。 在本文中&…...
