JVM垃圾回收思维导图:二. 理论算法

jvm垃圾回收思维导图 圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。该思维导图完整的描述了垃圾回收的各个关键点 立即下载

前言

《JVM垃圾回收思维导图》 系列专题:

  • 整理了JVM垃圾回收的基本思想与实现方式
  • Java版本为JDK11
  • 参考书籍为《深入理解Java虚拟机》2020年第三版

系列分为如下几块:

《JVM垃圾回收思维导图:一. 基本思想》
《JVM垃圾回收思维导图:二. 理论算法》
《JVM垃圾回收思维导图:三. HotSpot垃圾回收算法与实现》

五. 垃圾回收概念与算法

在这里插入图片描述

PS. 思维导图大纲
1. 理论(假设)基础
  • 弱分代假说:绝大多数对象都是朝生夕灭的(活的很短)
  • 强分代假说:熬过越多次垃圾收集过程的对象,就越难以消亡
  • 跨代引用相对于同代引用来说,仅占极少数
2. 虚拟机实现

垃圾收集器应该将java堆划分出不同的区域,将对象按照其年龄分配到不同的区域来缓存"

  1. 新生代(Young Generation)

对朝生夕灭的对象,虚拟机将其分派在新生代区域中。垃圾回收系统只需要关注少量的存活对象,能以较低代价回收到大量的空间

  1. 老年代(Old Generation)

对于难以消亡的对象,虚拟机将其分派在老年代区域中。垃圾回收系统以较低的频率去回收此区域的对象,这样开销更低效果更好"

  1. 记忆集(Remembered Set)
  • 新生代上建立的一个全局的数据结构
  • 记忆集把老年代划分成若干块,标出哪一块内存存在跨代引用
  • 发生Minor GC时,只有在[跨代引用关系的小块内存]里的对象才会被加到GC Roots进行扫描,缩小了回收检索的范围
3. 垃圾收集
1. 部分收集(Partial GC)			
    - 新生代收集(Minor GC/Young GC)	
		 	目标只是新生代的垃圾收集	
	- 老年代收集(Major GC/Old GC)		
			目标只是老年代的垃圾收集	
			目前只有GMS收集器会有单独收集老年代的行为	
	- 混合收集(Mixed GC)		
			目标是收集整个新生代以及部分老年代的垃圾收集	
			目前只有G1收集器有这样的收集策略	
2. 整堆收集(Full GC)		
		对整个Java堆和方法区的垃圾收集		
4. 垃圾收集算法
1. 标记-清除(Mark-Sweep)			
		  - 首先标记需要回收对象;在标记完成后,统一回收掉标记的对象		
		  - 反过来也可以,先标记不需要回收的对象;然后清除掉没有标记的对象,完成回收		
		  - 最早也是最基础的收集算法		
	  - 缺点		
		  + 执行效率不稳定:如果堆中包含大量可回收对象,则效率降低	
		  + 内存空间存在碎片化:碎片化越来越多可能会引起一次Full GC,花费时间长	
2. 标记-复制(Mark-Copy)	
		  - 将内存按容量分为大小相等的两块,每次只用其中一块	
		  - 当这一块内存空间用完了,就把其中存活的对象复制到另一块	
		  - 复制完成后,将前一块空间全部清除掉做回收	
		  - 两块内存空间依次交替使用,来实现垃圾回收	
	  - 缺点:可用内存只有一半,空间浪费严重	(实际上,新生代中的对象有98%熬不过第一轮收集	)
		
	 - 优化的复制-标记策略  Eden+Servivor	
		  + 将新生代分为一块较大的Eden空间和两块较小的Survivor空间	
		  + 每个具体的时间点,虚拟机只使用一块Eden和一块Survivor来储存对象	
		  + 垃圾回收时,将其中存活的对象复制到之前没用到的另一块Survivor中	
		  + Hotspot虚拟机的Serial、ParNew等新生代收集器都采用此策略	
		  + 老年代因为存活率高,会有大量存活对象,不适合用复制算法		
3. 标记-整理(Mark-Compact)		
				标记整理算法与标记复制很像,不同点在于:不复制,是整理
		- 让所有的对象都向内存空间一端移动,然后直接清理掉边界以外的内存	
		- 存活对象过多的话,""移动""对象负重较大,此时必须全程暂停用户应用程序,会影响效果和体验
		- 不整理(移动)又会出现标记-清除的碎片化	
	+ 妥协的优化方案		
		- 让虚拟机平时多数时间采用标记-清除算法,暂时容忍碎片化存在	
		- 当碎片化多到影响对象内存分配是,再采用标记-整理算法收集一次	
		- 基于标记-清除算法的CMS收集器在碎片过多时,会采用此方法"
	+ 此算法多用在老年代	
「Debug R」在从名字空间‘XVector’中出口方法时发现了不是S4通用的函数‘parallelSlotNames’... 每当R语言版本更新,Bioconductor的版本随之更替的时候,总会有一些神奇的报错会出现,比如说下面这种。 Error: package or namespace load failed for ‘GenomicRanges’: 在从名字空间‘XVector’中出口方法时发现了不是S4通用的函数‘parallelSlotNames’ 如果读中文读不懂,我们可以把它翻译成英文。 packa... 阅读详情

相关推荐

计算机毕业设计springboot股票模拟交易系统的设计与实现u6m959【附源码+数据库+部署+LW】

选题背景: 随着互联网和金融科技的快速发展,股票市场成为了吸引人们关注和参与的重要领域之一。越来越多的人开始对股票投资感兴趣,希望通过交易股票来获取收益。然而,对于初学者来说,股票市场的复杂性和风险往往让他们望而却步。因此,设计和实现一个股票模拟交易系统,可以帮助初学者更好地理解和掌握股票交易的规则和技巧,提高他们的投资决策能力。 意义: 股票模拟交易系统的设计与实现具有以下几个重要意义: 提供实践机会:股票模拟交易系统为投资者提供了一个实践的平台,使他们能够在真实市场环境下进行模拟交易,了解股票市场的

gp12081的博客 1759

JVM:垃圾回收机制【思维导图】

垃圾回收机制 判断对象不再被使用 p70 可达性分析 从GC Roots向下搜(一组一定活跃的引用) 只要跟「GC Roots」没有直接或者间接引用相连就是垃圾 引用计数 被引用+1,引用失败-1,计数器为0时不再被引用 缺点:若存在:互相依赖(引用)的A、B,引用计数不为0,导致无法回收 垃圾回收算法 标记清除 【标记】哪些没有被「GC Roots」引用的对象 【清除】不被「GC Roots」关联的都清除 存在问题【内存碎片】 标记复制 【标记】 【复制】:把「标记」.

weixin_47866171的博客 1196

pyautogui库详细教程,逐行注释(附项目实战:基于图像识别实现崩坏星穹铁道自动化测试)

本文包含了pyautogui的使用方法与常见问题指南,随文附带对游戏实现的自动化项目源码与说明文档

m0_53043024的博客 1万+

JVM垃圾回收思维导图:一. 基本思想

前言 上一章我们了解了JVM虚拟机的内存区域,可以知道JVM内部分为几块内存区域,每块内存区域有自己的用处。 具体知识可见:《JVM虚拟机内存区域》 JVM垃圾回收思想 JVM的内存区域在Java程序运行时,一直发生变化,与CPU等硬件进行着频繁的数据交换与计算。 随着Java程序的运行,这些内存区域可能会出现一些不再有用的内存空间; 内存资源是宝贵的,虚拟机需要释放掉这些无用的内存空间,回...

成长之路 1094

STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)

本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。

weixin_29163797的博客 342

从零到一:Mapviz实战部署与多源数据可视化全解析

本文详细解析了Mapviz在机器人开发中的实战部署与多源数据可视化应用。从安装配置、卫星地图接入,到GPS轨迹、相机图像与激光雷达点云的融合显示,提供了完整的操作指南。针对ROS1与ROS2环境的选择与迁移给出了明确建议,并分享了坐标系对齐、数据同步等常见问题的避坑方案,帮助开发者高效构建室外机器人的“上帝视角”调试平台。

weixin_29230773的博客 252

【JVM第十二篇】:Java垃圾回收器(GC)思维导图

hxcaifly的博客 696

LVGL在STM32H743IIT6上的性能优化技巧:如何提升图形界面刷新速度

本文详细介绍了在STM32H743IIT6高性能MCU上优化LVGL图形界面刷新速度的实战技巧。通过利用芯片的DMA2D硬件加速模块替代低效的软件画点,将绘制缓冲区放入SDRAM并启用双缓冲机制,以及合理配置CPU缓存与MPU,有效解决了界面卡顿问题。文章还涵盖了LVGL引擎调优、内存架构优化等关键步骤,帮助开发者充分发挥STM32H743的硬件潜力,实现流畅的图形界面体验。

vscode6remote的博客 306

JVM思维导图分享(包含详细知识点)

本文将JVM整理成思维导图,方便知识归纳与查询

xujunkai66的博客 1437

37、免驱动USB双目同步测距3D活体深度检测和RV1126结合V4L开发USB摄像头使用

基本思想:需要使用双目摄像头在rv1126上进行活体检测,然后将画面实时返回到桌面上,记录一下。第二步:刷机rv1126开发板系统和ssh远程连接,见参考目录。第一步:购买可见光的红外摄像头,见参考连接,在PC端测试可用。

sxj731533730 2620

基于大模型最大化电力交易收益(策略与代码实践)

新一代电力交易系统正借助大型语言模型(LLM)实现智能化转型。面对可再生能源占比提升带来的市场波动性加剧,传统交易策略已难以应对。LLM通过多模态能力,能够实时处理海量异构数据,包括政策公告、设备检修信息、天气报告等非结构化数据,构建更精准的电力市场预测模型。智能交易系统主要包含三大核心模块:市场情报感知与理解器、融合LLM的短期电价预测模型和自适应交易策略生成器。这些模块协同工作,可在几分钟内完成事件分析、价格预测和策略生成,显著提升交易效率。系统还能实现跨市场套利和动态风险管理,但需注意数据质量、模型验

专注AI大模型,软件混淆,授权 1246

巨大的JVM知识点思维导图

之前总结过的一份JVM思维导图,分享一下。撑撑博客数量,哈哈。。 图太大了,无法上传,传一份文字版吧。需要图的可以移步 类加载子系统 加载 字节码文件通过加载器CLassLoader加载到内存元空间 ClassLoader BootstrapClassLoader 启动类加载器,顶级类加载器,负责加载JDK核心包rt.jar等,由C编写,所以在java中没有类与之对应,无法获取。...

maybe的博客 486

SAP Gateway Foundation OData V4 服务管理深度解析,从 Service Repository 到 Service Group 的完整运行逻辑

本文解析了SAP S/4HANA中OData V4 API的技术架构,重点阐述Service Repository、Service与Service Group的三层管理体系。以SalesOrder和PurchaseOrder API为例,说明不同服务可能属于特定repository(如srvd_a2x)而非默认DEFAULT库。Service Group作为业务模型组合单元,支持跨服务引用和统一配置,其发布状态直接影响服务可用性。文中对比了后台管理事务/IWBEP/V4_ADMIN与网关端/IWFND/V4

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 81

JVM垃圾回收算法之复制(Copying)

一、基本原理二、JVM中的优化实现(Eden与Survivor)三、核心优势四、局限性五、适用场景六、现代演进总结复制算法通过空间换时间的策略,成为新生代垃圾回收的黄金标准。其优化版本(Eden+Survivor)在JVM中广泛使用,但需结合分代收集理论,避免在高存活率场景下性能下降。理解其原理有助于合理配置JVM参数(如),优化应用性能。—END—

DKPT的博客 943

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JVM垃圾回收思维导图:三. HotSpot垃圾回收算法与实现

前言 上一章我们了解了JVM虚拟机的内存区域,可以知道JVM内部分为几块内存区域,每块内存区域有自己的用处。 有关JVM垃圾回收的基本知识,可参考文章: 《JVM垃圾回收思维导图:一. 基本思想》 《JVM垃圾回收思维导图:二. 理论算法》 Hotspot垃圾回收理论 Hotspot经典垃圾收集器 Hotspot低延迟垃圾收集器 ...

成长之路 560

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

五分钟学Java:如何学习Java面试必考的JVM虚拟机

原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者。 本文思维导图 为什么要学习JVM虚拟机 最近的你有没有参加Java面试呢?你有没有发现,Java面试中总是爱考一类问题,那就是JVM虚拟机,为什么面试官这么爱考察JVM的问题呢,这是因为,所有的Java程序本质上都是运行在JVM之上的,没有JVM虚拟机,也就没有Java语言的执行环境,只有掌握了JVM虚拟机的相关知识,你才能说你...

Java技术江湖 2985

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JVM模型深入学习(思维导图-java架构 程序员必备)

定义与功能:JVM是Java平台的一部分,它实现了Java的“编写一次,运行到处”的承诺。抽象层次:为开发者提供了一个抽象层,使得Java代码可以在任何安装了适当JVM的平台上运行。

qq_33240556的博客 644

垃圾回收算法

本文摘要: 垃圾回收(GC)是自动内存管理机制,负责回收不再使用的对象内存空间。文章系统介绍了GC的核心概念,包括对象存活判断方法(引用计数法和可达性分析)、四种引用类型(强/软/弱/虚引用)、三种基本算法(标记-清除/复制/整理)以及分代收集理论。重点分析了并发标记中的三色标记法及解决方案,探讨了GC的性能代价(如STW问题)和优化目标。通过代码示例展示了引用计数法的循环引用问题,并梳理了GC从1960年至今的发展历程。

2301_81699788的博客 434

JAVA进阶——JVM

1、JVM 现在人们对jvm(Java虚拟机)的探究式越来越深了,如果我们想当一名java程序员,jvm是我们必须要跨过去的一道坎。 学习Java的人对jvm这个词并不陌生,来了解一下java的进阶知识Java虚拟机吧! 学习jvm的方法: jvm的大多数知识点,我们真正要去实现的并没有几个,很多都是以理论学习为主。善用百度和思维导图(参考别人画好的,非常丰富),通过思维导图或者百度,把一个点一个点搞清楚。 1.1、 JVM与操作系统之间的关系? jvm是运行在操作系统上的,操作系统是jvm的下一层。 jv

qq_44769557的博客 2782

JVM内存与GC机制全景深度剖析:从对象诞生到垃圾回收的完整生命周期

本文从对象生命周期的视角系统阐述了JVM内存管理和垃圾回收机制。主要内容包括:1)对象在堆内存中的分配过程(Eden区)及内存分配策略;2)对象存活判定算法(可达性分析)和引用类型(强、软、弱、虚);3)对象在Survivor区的晋升机制及最终在老年代被回收的完整生命周期。文章通过图示和代码示例详细解析了对象创建、内存分配、GC处理等关键环节,并对比了不同引用类型的特点与应用场景,为理解JVM内存管理提供了系统化的视角。

l66584837的博客 923

JVM 八股之首:三大垃圾收集算法

前文介绍过,基于分代收集理论的指导,我们才可以针对堆中不同的区域,设计出不同的垃圾收集算法,主要有以下三种: 标记-清除算法 标记-复制算法 标记-整理算法 全文思维导图如下: 标记-清除算法,Mark-Sweep“标记-清除”(Mark-Sweep)算法是最基础的垃圾收集算法,在 1960 年由 Lisp 之父 John McCarthy 所提出,后面所介绍的两种算法都是基于此改进而来。 不难理解,从名称上就已经能看出,整个算法分为两个大步骤: 标记 and 清除。 拓展来说: 标记,

yangjnsjbad的博客 279

面试官:你了解GC吗?一文读懂分代回收机制

你真的了解Java的分代收集吗?什么是垃圾呢?垃圾会马上被回收吗?JVM中哪些区域会被回收呢?Java/C++垃圾收集有什么不同?不懂?一文带你搞懂gc基础!

小明的Java问道之路 2020

学弟学妹别在迷茫也被瞎学了,熬夜给你们肝了 9 大思维导图,跟着学就行了

去年的这个时候,我刚刚参加完春招,在春招时,虽然我的基础还算扎实,但是有那么点心高气傲,很多知识点,难的可能会,但简单的,反而不怎么会,而且很多细节都给忘了,例如被问了好些 Linux,都是很简单的命令,但我都没答出来,而且还是 0 项目经验。最终的结果就是,春招面了几家公司,都惨败了。 通过春招,让我知道了自己的一些短板,于是,大概从 6 月份开始,我就开始系统着整理知识了,为了在基础知识稳妥一些,从来不做笔记的我,第一次决定做笔记。 我为什么不做笔记?一个原因是,小学到大学,基本没做过,做起笔记很花时间

帅地 1万+

JVM垃圾回收--思维导图

weixin_73670733的博客 51

这些不可不知的JVM知识,我都用思维导图整理好了,字节跳动Java面试凉凉经

1、看视频进行系统学习这几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。2、读源码,看实战笔记,学习大神思路“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。

2401_84024576的博客 403
上一篇: JVM垃圾回收思维导图:一. 基本思想
下一篇: JVM垃圾回收思维导图:三. HotSpot垃圾回收算法与实现
郭Albert
博客等级 码龄14年 110粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭Albert

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值