【jvm】讲讲jvm中的gc
目录
- 1. 说明
- 2. 主要算法
- 2.1 标记-清除算法
- 2.2 复制算法
- 2.3 标记-整理算法
- 3. 主要回收器
- 3.1 Serial GC
- 3.2 Parallel GC
- 3.3 CMS(Concurrent Mark-Sweep)GC
- 3.4 G1(Garbage-First)GC
- 4. 触发条件
- 4.1 Minor GC(Young GC)
- 4.2 Full GC(Major GC)
- 5. 优化策略
1. 说明
- 1.JVM(Java Virtual Machine)中的GC(Garbage Collection)是Java虚拟机提供的一种自动内存管理机制,用于自动回收不再被使用的对象所占用的内存空间。
- 2.GC的基本原理是将内存中不再被使用的对象进行回收,以释放内存资源。
- 3.GC通过一系列算法和机制来判断哪些对象是不再被使用的,并对其进行回收。
2. 主要算法
2.1 标记-清除算法
- 1.首先标记出所有需要被回收的对象。
- 2.然后在标记完成后统一回收掉所有被标记的对象。
- 3.这种方法可能导致内存碎片化问题,从而影响程序性能。
2.2 复制算法
- 1.将内存划分为等大的两块,每次只使用其中的一块。
- 2.当一块内存用完了,触发GC时,将该块中存活的对象复制到另一块内存区域,然后一次性清理掉这块没有用的内存。
- 3.这种算法解决了内存的碎片化问题,但内存利用率不高,每次只能使用一半内存。
- 4.在JVM中,新生代通常使用这种算法。
2.3 标记-整理算法
- 1.标记过程与标记-清除算法相同。
- 2.后续步骤不是直接对可回收对象进行回收,而是让所有存活的对象都向内存的一端移动,然后直接清理掉端边线以外的内存。
- 3.这种算法适用于老年代,因为老年代中对象的存活率较高,复制算法的效率会较低。
3. 主要回收器
3.1 Serial GC
- 1.单线程GC,适用于单CPU环境。
- 2.在进行垃圾回收时,会暂停所有用户线程(Stop The World)。
3.2 Parallel GC
- 1.多线程GC,适用于多CPU环境。
- 2.与Serial GC类似,但使用多线程进行垃圾回收,以提高效率。
3.3 CMS(Concurrent Mark-Sweep)GC
- 1.以获取最短回收停顿时间为目标的GC。
- 2.使用三色标记算法进行标记,并发进行垃圾回收。
- 3.在并发标记阶段,用户线程也在运行,可能会导致标记结果不准确,从而引发更严重的问题(如浮动垃圾)。
3.4 G1(Garbage-First)GC
- 1.面向服务器的垃圾收集器,适用于具有大量内存和多核处理器的机器。
- 2.使用分代收集算法,但不再局限于固定的新生代和老年代区域,而是将整个堆内存划分为多个大小相等的区域(Region)。
- 3.根据对象的存活时间和大小动态调整不同区域的垃圾回收策略。
4. 触发条件
4.1 Minor GC(Young GC)
- 1.当新生代的Eden区域满了时,会触发Minor GC。
- 2.Minor GC会回收Eden区域和Survivor区域中的垃圾对象,并将存活的对象转移到另一个Survivor区域或晋升到老年代。
4.2 Full GC(Major GC)
- 1.当老年代区域满了时,会触发Full GC。
- 2.Full GC会回收整个堆内存(包括新生代和老年代)以及方法区中的垃圾对象。
5. 优化策略
- 1.选择合适的GC算法和回收器:根据应用程序的性质和需求,选择适合的GC算法和回收器。
- 2.调整堆内存大小:适当设置堆内存大小,避免过大或过小的堆对性能产生负面影响。
- 3.避免创建过多临时对象:过多的临时对象会导致频繁的GC事件。可以重用对象或者使用对象池来减少临时对象的创建。
- 4.优化对象的生命周期:尽量使对象的生命周期与其实际使用时间相符。避免长时间存活的对象进入新生代,从而减少老年代的压力。
- 5.监控和调优:使用JVM性能分析工具来监控GC事件。找出性能瓶颈并进行调优。
相关文章:
【jvm】讲讲jvm中的gc
目录 1. 说明2. 主要算法2.1 标记-清除算法2.2 复制算法2.3 标记-整理算法3. 主要回收器3.1 Serial GC3.2 Parallel GC3.3 CMS(Concurrent Mark-Sweep)GC3.4 G1(Garbage-First)GC 4. 触发条件4.1 Minor GC(Young GC&am…...
openlayers地图事件
OpenLayers是一个开源的JavaScript库,用于在Web上创建交互式地图。它提供了许多地图事件,使用户可以与地图进行交互。以下是OpenLayers常用的地图事件: 1. click:当用户单击地图时触发该事件。 2. dblclick:当用户双…...
杂记9---一些场景git操作汇总
背景:不同项目需求,所需要git操作集合,不太一样,这里汇总记录一下。 场景1:给本地项目添加到远程仓库的新建分支上 把本地节点保存在自己库的一个分支: git init git remote add origin xxx.git 远程仓库…...
Mysql索引,聚簇索引,非聚簇索引,回表查询
什么是索引 数据库索引是为了实现高效数据查询的一种有序的数据数据结构,类似于书的目录,通过目录可以快速的定位到想要的数据,因为一张表中的数据会有很多,如果直接去表中检索数据效率会很低,所以需要为表中的数据建立…...
【优选算法 二分查找】二分查找算法入门详解:二分查找小专题
x 的平方根 题目解析 算法原理 解法一: 暴力解法 如果要求一个数(x)的平方根,可以从 0 往后枚举,直到有一个数(a),a^2<x,(a1)^2>x,a即为所求; 解法二:二分查找 …...
如何将CSDN博客下载为PDF文件
1.打开CSDN文章内容 2.按键盘上的f12键(或者右键—审查元素)进入浏览器调试模式,点击控制台(Console)进入控制台 3.在控制台输入以下代码,回车 4.在弹出的打印页面中将布局设置成横向,纵向会…...
pdf转word/markdown等格式——MinerU的部署:2024最新的智能数据提取工具
一、简介 MinerU是开源、高质量的数据提取工具,支持多源数据、深度挖掘、自定义规则、快速提取等。含数据采集、处理、存储模块及用户界面,适用于学术、商业、金融、法律等多领域,提高数据获取效率。一站式、开源、高质量的数据提取工具&…...
2024年下半年网络工程师案例分析真题及答案解析
2024年下半年网络工程师案例分析真题及答案解析 试题一(15分) [说明] 公司为某科技园区的不同企业提供网络服务,不同企业的业务有所不同,每个企业因业务需要在不同的地点有多个分支机构。其拓扑结构如图1所示。企业用户通过楼层接入交换机、楼栋汇聚交换机和区域交换机接…...
English phonetic symbol
英语音标发音表-英语48个音标在线读 (jiwake.com) 【英语音标教程】从此学会国际音标|英式音标|BBC音标教程全解_哔哩哔哩_bilibili 元音 单元音 /iː/,/ɪ/ 这两个音不是发音长短的区别, /uː/ /ʊ/ 上面那个就正常读,下面那个她的气大概是往你斜…...
普及组集训--图论最短路径设分层图
P4568 [JLOI2011] 飞行路线 - 洛谷 | 计算机科学教育新生态 可以设置分层图:(伪代码) E(u,v)w;无向图 add(u,v,w),add(v,u,w); for(j1~k){add(ujn,vjn,w);add(vjn,ujn,w);add(ujn-j,vjn-j,0);add(vjn-j,ujn-j,0); } add(ujn-j,vjn-j,0); add(vjn-j,uj…...
SYN6288语音合成模块使用说明(MicroPython、STM32、Arduino)
模块介绍 SYN6288中文语音合成模块是北京宇音天下科技有限公司推出的语音合成模块。该模块通过串口接收主控传来的语音编码后,可自动进行自然流畅的中文语音播报。 注:SYN6288模块无法播报英文单词和句子,只能按字母播报英文 ;而…...
Spring完整知识三(完结)
Spring集成MyBatis 注意 Spring注解形式集成MyBatis时,若SQL语句比较复杂则仍采用映射文件形式书写SQL语句;反之则用注解形式书写SQL语句,具体可详见Spring注解形式 环境准备相同步骤 Step1: 导入相关坐标,完整pom.…...
保姆级教程Docker部署Redis镜像
目录 1、创建挂载目录和配置文件 2、运行Redis镜像 3、查看redis运行状态 1、创建挂载目录和配置文件 # 创建宿主机Redis配置文件存放目录 sudo mkdir -p /data/docker/redis/conf# 创建Redis配置文件 cd /data/docker/redis/conf sudo touch redis.conf 到Github上找到Redi…...
子类有多个父类的情况下Super不支持指定父类来调用方法
1、Super使用方法 super()函数在Python中用于调用父类的方法。它返回一个代理对象,可以通过该对象调用父类的方法。 要使用super()方法,需要在子类的方法中调用super(),并指定子类本身以及方法的名称。这样就可以在子类中调用父类的方法。 …...
AI大模型ollama结合Open-webui
AI大模型Ollama结合Open-webui 作者:行癫(盗版必究) 一:认识 Ollama 1.什么是Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和…...
RK3568笔记2:NOR_Flash和NAND_Flash与SDMMC和eMMC
1. 本质区别 特性NOR Flash/NAND FlashSDMMC/eMMC定义基础存储器(原始闪存芯片)基于闪存芯片的存储模块,带有控制器组成结构只有原始存储芯片存储芯片 控制器控制方式需主机直接控制,读写逻辑由主机完成内置控制器,主…...
windows python qt5 QChartView画折线图
环境:windows pyqt5 ,用QCartView画折线图 环境需要提前安装 pip install PyQtChart 折线图随着时间推移会不断移动,主动更新x轴坐标 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtChart imp…...
阿里云通义千问:全面解析智能云服务先锋
一、技术架构与基础 模型构建基石 采用大规模语料库训练,涵盖多领域知识,如科学、历史、文学等,确保知识储备丰富多样。运用先进的神经网络架构,深度优化模型结构,提高信息处理效率与准确性。持续的语料更新机制&…...
QT 贪吃蛇
1.注意点 新new对象时,要food->show(),否则屏幕不显示 setText() 要求字符串 事件的触发必须写在QWidget中或这是他的子类才能触发,snake.cpp继承的是QTimer 产生动态的原因是定时器每间隔一秒执行一次 信号可以定义在别的.cpp中,只要连接…...
二、点亮希望之光:寄存器与库函数驱动 LED 灯
文章目录 一、寄存器1、存储器映射2、存储器映射表3、寄存器4、寄存器映射5、寄存器重映射6、总线基地址、外设基地址、外设寄存器地址7、操作寄存器(以操作一个GPIO口为例)1. 寄存器地址定义部分2. GPIOD_Configuration 函数部分3. main 函数部分 二、库…...
在供应链与资本获取驱动下,近半数全球高管计划于未来12个月内拓展美国业务布局
• 45%的企业高层管理人员计划在未来12个月内设立美国法律实体;另有27%表示将在未来两至三年内考虑进入美国市场 • 65%的受访者将供应链或制造效率视为推动赴美扩张的首要驱动因素 • 88%的企业将联邦及州层面的税务申报认定为美国合规中最具挑战性的领域 CSC最新研…...
3大突破策略:Bypass Paywalls Clean 2024全场景应用指南
3大突破策略:Bypass Paywalls Clean 2024全场景应用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,付费墙已成为知识获取的主要障碍…...
视频硬字幕提取终极指南:本地化AI工具让字幕制作效率提升10倍
视频硬字幕提取终极指南:本地化AI工具让字幕制作效率提升10倍 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、…...
3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案
3个维度解析G-Helper:华硕笔记本性能优化的轻量级解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...
FastbootEnhance:Windows上最直观的Fastboot工具箱与Payload提取器
FastbootEnhance:Windows上最直观的Fastboot工具箱与Payload提取器 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 还在为复杂的Fastb…...
Ubuntu 23.04 避坑指南:pip install virtualenv 报错 extern-managed-environment 的3种解决方案
Ubuntu 23.04 Python包管理新规深度解析:安全与灵活性的平衡之道 最近升级到Ubuntu 23.04的Python开发者们可能遇到了一个令人困惑的新错误——当尝试使用pip install安装包时,系统会抛出"externally-managed-environment"的警告并拒绝执行。这…...
Blender3mfFormat插件:3MF文件处理全攻略
Blender3mfFormat插件:3MF文件处理全攻略 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 一、项目核心价值解析 Blender3mfFormat作为Blender的专业级3MF文件…...
SolidWorks参数化建模实战:从规则定义到智能装配
1. 参数化设计的核心思想与实战价值 我第一次接触SolidWorks参数化建模是在设计一个多规格管道连接件时。当时客户要求在24小时内提供5种不同口径的变型设计,传统建模方法让我不得不复制粘贴并逐个修改尺寸,结果在第三次修改时漏掉了一个关键孔位&#x…...
【DexGraspNet与多指手抓取算法详解】第三章 DexGraspNet数据集构建机理
目录 第三章 DexGraspNet数据集构建机理 第一部分 原理详解 3.1 数据生成流程总览 3.1.1 Asset准备与处理 3.1.1.1 ShapeNetSem物体库筛选 3.1.1.1.1 几何网格清理与流形检测 3.1.1.1.2 物理属性赋值(质量、质心) 3.1.1.2 视觉资产渲染管线 3.1.1.2.1 材质与纹理映射…...
Xilinx Video IP(二)AXI4-Stream视频流高效缓冲与FIFO深度优化
1. AXI4-Stream视频流缓冲的核心挑战 在视频处理系统中,AXI4-Stream协议因其高效的数据传输特性成为Xilinx视频IP的首选接口。但实际工程中,时钟域异步和速率不匹配两大问题就像两个调皮的孩子,总喜欢给工程师制造麻烦。我曾在多个项目中遇到…...
