【Java】JVM(二)、Java垃圾收集算法

JVM系列之垃圾收集算法 前言 上节我们介绍了JVM虚拟机对象的存活判断,提到了GC回收,GC回收指的是将存在内存中的不会再被使用的对象当成垃圾倒掉,垃圾回收算法有很多例如:引用计数,标记清除,复制,分代,分区,那么今天我们就来谈谈Java中这几种垃圾回收算法,OK,让我们开启今天的JVM之旅。 引用计数算法 引用计数是一个比较古老的算法,核心是:在对象被其他对象所引用时计数器加1,而当引用失效时则减1,但是这种方式有非常严重的问题:无法处理循环引用的情况,还有就是每次进行加减操作比较浪费系统性能。 标记-清除算.. 阅读详情

一、标记-清除算法

  算法主要分为两个步骤

  1. 标记:

  遍历所有的 GC Roots, 然后标记所有可达对象为存活对象

  2. 清除:

  遍历堆中所有对象,然后将没有标记的对象清除。

  存在不足:

  1. 效率低下。

  2. 产生大量的磁盘空间

二、复制算法

  原理:将磁盘分为一半一半,每次都是用50%内存,在内存用完了, 将这50%内存中存活的对象复制到另外的50%的内存中去。然后将过的空间进行清理。

  

  存在问题:

  将空间缩小为原来的一半

 

  优化:

  所有新生代的对象存活时间短, 所以每进行一次GC存活的对象很少, 现在将内存分为一块较大的Eden区域和两块较小的Survivor区域(From和To),每次都是用 Eden区域和一块From区域,当内存使用完之后,通过复制算法,将Eden和From中存活的对象复制到To区域中。然后From与To互换。

 

三、标记-整理

  原理:

  标记:遍历所有的 GC Roots, 然后标记所有可达对象为存活对象

  整理:让存活对象向一端移动

 

【立创EDA-PCB设计基础】1.嘉立创EDA专业版软件安装+PCB基本概念+原理图绘制 本文详解PCB基本概念以及实现MCU最小系统原理图的绘制(原理图包括MCU芯片GD32F103C8T6、外部晶振、输出端口、USB输入口、5v转3v3稳压输出、复位按键、唤醒按键、LED)及嘉立创EDA专业版软件安装。为本专栏【立创EDA-PCB设计基础】后面章节实现PCB绘制做准备。 阅读详情

相关推荐

告别Win11睡眠假死:深入解析Modern Standby S0与S3冲突及注册表修复方案

本文深入解析了Windows 11中Modern Standby(S0)与传统睡眠(S3)模式的冲突,该冲突是导致电脑睡眠后出现假死、断网等问题的根源。文章提供了通过修改注册表键值(PlatformAoAcOverride)强制启用稳定S3睡眠的终极修复方案,并附有详细诊断步骤与避坑指南,帮助用户彻底解决睡眠故障。

ol789012的博客 823

Java中的常见JVM垃圾收集算法

介绍几种常见的垃圾收集算法,比如复制算法、标记清除算法、标记压缩算法、综合其他算法的分代算法、G1的分区算法等。

终生学习践行者 3768

手把手教你学Simulink--基于故障诊断与容错控制的场景实例:电动汽车电机驱动系统的故障检测与隔离

本文介绍了基于Simulink的电动汽车电机驱动系统故障诊断与隔离(FDI)仿真建模方法。通过构建永磁同步电机(PMSM)驱动系统模型,实现了IGBT开路、电流传感器漂移等典型故障的注入与检测。重点阐述了基于观测器的残差生成方法,以及利用Stateflow实现的故障隔离逻辑。仿真结果表明,该系统能在85ms内准确识别故障类型,隔离准确率达97%,并支持容错控制。文章还探讨了AI故障预测、数字孪生等高级应用方向,为电动汽车电驱系统安全提供了完整的仿真解决方案。

MHD0815的博客 961

JVM垃圾收集之——垃圾收集算法

链接: JVM垃圾收集之——怎样判定一个对象是不是垃圾 接上篇,介绍完怎样判定一个对象是不是垃圾之后,就该瞅一瞅垃圾是怎样回收的了 首先我们要知晓,垃圾收集是建立在两个分代假说之上的:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄分配到不同的区域中存活。给出收集的几个名词,以便于大家看文章:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象,也可以反过来标记存活的对象,然后回收违背标记的对象。第一步、找到内存中需要被回收的对象,并且把它们标记出来。第二步、清除掉被标记需要

想着百万年薪努力的小赵 5万+

自监督预训练(三)wav2vec 2.0原理剖析

一、整体流程 二、feature encoder 理解Conv1d nn.Conv1d(in_channels=5, out_channels=20, kernel_size=3, stride=2) 假设输入input=(batch, in_channels, in_len) batch=1 in_channels=5,对应向量大小,比如word embedding in_len=10,对应word的个数 cnn内部kernel=(in_channels, kernel_size)=(5,3),相当

xmdxcsj的专栏 2万+

深入解析uncompyle6反编译pyc文件及常见错误修复指南

本文深入解析了使用uncompyle6工具反编译Python字节码文件(.pyc)的完整流程。针对实践中最高频的KeyError和Python版本范围限制两大错误,提供了详细的修复方案与步骤指南,并分享了处理复杂反编译结果的高级技巧与安全实践,是进行代码恢复、调试与分析的重要参考。

uber9的博客 536

JVM垃圾收集算法及垃圾收集器

今天来总结一下最近学习到的JVM垃圾收集算法和垃圾收集器。原来以为这部分知识,对于一个Java程序员的用处不大,可是如果你的运营Web项目,出现了性能问题,那么这部分知识可以帮助你从运维的角度来优化你的项目。       首先,先讲一下JVM的垃圾收集算法,因为这是学习垃圾收集器的前堤。各种垃圾收集器也都是基于这些算法来实现的。 JVM垃圾收集算法       JVM垃圾收集算法有四种:

hello 5528

Android 集成 Google 与 Facebook 第三方登录实战详解(2024版)

本文详细介绍了2024年Android应用集成Google与Facebook第三方登录的完整实战指南。通过分步教程和代码示例,帮助开发者快速实现一键登录功能,提升用户体验和注册转化率,同时涵盖隐私合规和常见错误处理的最佳实践。

blue的专栏 822

JVM 垃圾收集器

E代表Eden区,S代表 Survivor 区,H代表的是 Humongous(G1 用来分配大对象的区域,对于 Humongous 也分配不下的超大对象,会分配在连续的 N个Humongous 中),剩余的深蓝色代表的是0ld区,灰色的代表的是空闲的 region这种思想上的转变和设计,使得G1可以面向堆内存任何部分来组成回收集来进行回收,衡量标准不再是它属于哪个分代,而是哪块内存存放的垃圾最多,回收收益最大,这就是G1收集器的 Mixed GC模式,即混合GC模式。这样实现简单,运行高效。

m0_68041576的博客 1854

[QMT和ptrade量化交易小白入门]-109、小市值选股的基础上用六脉神剑评分,回测年化可到132%

本专栏主要是介绍QMT和ptrade的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写200篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。

木头大左的博客 1865

YOLOv11在视频流中的时序建模改进-(加入ConvLSTM或Transformer捕捉帧间关联)

本文提出了一种结合ConvLSTM和Transformer的改进YOLOv11算法,用于增强视频目标检测的时序建模能力。针对视频检测中运动模糊、遮挡等挑战,研究分析了ConvLSTM的局部时空特征建模和Transformer的全局注意力机制之间的互补性。通过数学公式详细阐述了ConvLSTM的门控机制和Transformer的自注意力计算原理,并提出分层融合策略:底层使用ConvLSTM处理高分辨率特征捕捉局部运动,高层应用Transformer建立全局时空关联。改进方案在YOLOv11架构中插入时序增强模

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 680

JVM垃圾收集——垃圾收集器

垃圾收集器的发展和分类、Serial收集器、ParNew收集器、Parallel Scaveng收集器、CMS收集器、G1收集器、ZGC收集器

码说芯语的博客 2907

手把手教你学simulink(11.6)--Simulink 航空航天场景:基于Simulink的飞机俯仰控制系统的数学模型

自动驾驶系统在航空航天领域具有重要应用,特别是在商业航空、军用航空和无人机等领域。PID控制器因其简单且有效的特性,被广泛应用于飞行控制。Simulink提供了一个强大的平台,用于建模、仿真和分析动态系统,非常适合设计和测试自动驾驶系统的控制器。通过本项目的实施,我们成功设计和仿真了一个用于控制飞机俯仰角的PID控制器。该项目展示了从系统建模、控制器设计、仿真验证到结果分析的完整流程,为PID控制器的设计提供了有价值的参考。希望这个实例能够为你的航空航天项目提供有用的指导。

MHD0815的博客 565

JVM的垃圾收集算法及垃圾收集器

本文介绍了JVM垃圾收集算法与收集器。分代收集理论将堆区划分为不同区域(新生代/老年代),针对各区域特点采用不同算法:新生代使用标记-复制算法,老年代采用标记-清除或标记-整理算法。重点分析了两种主流收集器:CMS收集器通过并发标记/清除实现低停顿,但会产生内存碎片;G1收集器采用Region分区设计,支持可预测停顿和空间整合,能同时管理新生代和老年代。

W18263823008的博客 1043

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

JVM垃圾收集算法和垃圾收集器

本文系统介绍了JVM垃圾收集算法和主流垃圾收集器。分代收集是商用虚拟机的核心策略,新生代多采用复制算法(如Serial、ParNew),老年代则使用标记-整理(Serial Old)或标记-清除(CMS)。重点分析了7种收集器特性:单线程的Serial/Serial Old适合客户端场景;多线程的ParNew是CMS默认搭档;Parallel Scavenge/Old组合专注吞吐量优化;CMS则以最短停顿时间为目标。不同算法和收集器的组合适应各类应用场景,需根据内存特点、CPU资源和对停顿时间的敏感度进行合

weixin_44963129的博客 1128

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JVM - 再聊GC垃圾收集算法及垃圾收集器

文章目录Pre分代收集理论常见的垃圾收集算法标记 Pre JVM-04垃圾收集Garbage Collection(上)【垃圾对象的判定】 JVM-05垃圾收集Garbage Collection(中)【垃圾收集算法】 JVM-06垃圾收集Garbage Collection(下)【垃圾收集器】 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法 , 意思就是根据对象存活周期的不同将 java堆分为新生代和老年代,这样就可以根据各个年代的特点选择合适的垃圾收集算法。 举个例子,新生代中,大部分对象都是

小工匠 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JVM中垃圾收集算法总结

  通过前面的介绍我们了解了对象创建和销毁的过程。那么JVM中垃圾收集器具体对对象回收采用的是什么算法呢?本文主要记录下JVM中垃圾收集的几种算法。 JVM的垃圾回收的算法 标记-清除算法(Mark-Sweep)   标记清除算法是最基础的回收算法,该算法分为两个阶段,即标记阶段和清除阶段。 阶段 说明 标记阶段 先根据可达性分析算法找出需要回收的对象进行标记 清除阶段 统一回...

波波烤鸭的博客 2775

JVM垃圾收集算法

java虚拟机JVM垃圾收集算法有四种:标记-清除算法、复制算法

残缺的孤独 3308

jvm 垃圾收集算法 详解

这两个分代假说共同奠定了多款常用的垃圾收集器的一致的设计原则:收集器应该将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。Java堆划分为新生代(Young Generation)和老年代(Old Generation)两个区域。在新生代中,每次垃圾收集时都发现有大批对象死去,而每次回收后存活的少量对象, 将会逐步晋升到老年代中存放。

2402_82958989的博客 1366

JVM 垃圾收集算法全面解析

本文详细介绍了Java 8版本中的垃圾收集机制,重点分析了分代收集理论及其对垃圾回收效率的影响。文章深入探讨了三种主要的垃圾收集算法:标记-清除、标记-复制和标记-整理算法,并结合实际的Java 8垃圾收集器(Serial、Parallel、CMS、G1)进行讲解。每种算法的优缺点、适用场景以及在JVM中的实现方式都得到了详细阐述。此外,文中还提供了相关的JVM配置示例和代码,帮助读者更好地理解垃圾收集的原理及其调优策略。

持续输出Java相关知识 1063

JVM堆内存介绍、垃圾收集算法、垃圾回收器汇总

JVM堆内存介绍、垃圾收集算法、垃圾回收器汇总

scoful的专栏 2万+

JVM垃圾收集——相关算法

对象存活判断、GC Roots集合、对象的finalization机制、清除垃圾对象、垃圾收集算法的复合与升级

码说芯语的博客 1004

JVM 垃圾收集算法详解!

JVM 垃圾收集算法详解!🎉

qq_56158663的博客 1222

jvm的三种算法以及10种垃圾收集器

jvm的三种算法以及10种垃圾收集器 jvm怎么知道堆里面的对象是无用数据,有两种方式: 1.引用计数法: 每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。 2.跟查找GC Roots (Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,即为不可达对象。 jvm的三种基本算法 1.1 标记

li646495946的博客 4648

JAVA JVM垃圾收集

即使在可达性分析算法中判定为不可达的对象,也不是“非死不可”的,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记,随后进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。设计者一般至少会把Java堆划分为新生代(Young Generation)和老年代(Old Generation)两个区域,在新生代中,每次垃圾收集时都发现有大批对象死去,而每次回收后存活的少量对象,将会逐步晋升到老年代中存放。

best_virtuoso的博客 1083

最全的 JVM 面试知识点(二):垃圾收集

在上一篇介绍了 Java 虚拟机内存的运行时数据区。本章将会介绍 Java 中的垃圾收集算法与常用的垃圾收集器。 在涉及 Java 相关的面试中,面试官经常会让讲讲 Java 中的垃圾收集相关的理解和常见的分类。可见,光就应付面试而言,JVM 的垃圾收集也对每一位 Java 开发者很重要。除此之外,对于我们了解和解决 Java 应用的性能时,也很有帮助。 本文的主要内容: Java 中的引用 ...

aoho求索 2287
上一篇: 【Java】JVM(一)、Java内存区域
下一篇: 【Java】JVM(三)、Java垃圾收集器
三生石1103
博客等级 码龄12年 16粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值