JVM几种垃圾回收算法

JVM 有哪些垃圾回收算法? JVM垃圾回收算法 标记-清除算法 该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来先标记所有不需要被回收的对象,标记完成以后回收没有被标记的对象。 优缺点: 执行效率不稳定,适用于对象存过较多的区域,适用于老年代会产生内存碎片 何为清除? 标记清除并不是真的置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次有新对象需要加载时,判断垃圾的位置空间是否够,如果够,就存放。 复制算法 将可用内存分为大小... 阅读详情

1、标记-清除算法

标记-清除算法分为“标记”和“清除”两个阶段,执行过程如下图所示:
1、标记:首先标记出所有需要回收的对象
2、清除:在标记完成后统一回收所有被标记的对象

在这里插入图片描述
标记-清除算法主要有两个不足:
1、效率问题,标记和清除的两个过程效率都不高
2、标记-清除会产生大量不连续的内存碎片,这会导致在后面需要分配连续的大对象时,无法找到足够大的连续内存而导致不得不提前触发另一次垃圾收集动作。

2、复制算法

复制算法的大致思路如下,其执行过程如下图所示:
1、首先将可用内存分为大小相等的两块,每次只使用其中的一块。
2、当这一块的内存用完了,就将还存活的对象连续复制到另一块上面,然后把使用过的内存空间一次清理掉。
复制算法的代价就是将内存缩小为原来的一半。
在这里插入图片描述
现在的商业虚拟机都是采用复制算法来回收新生代。
1、新生代的内存分为一块较大的Eden空间和两块较小的Survivor空间。
2、每次使用Eden和一块Survivor,当进行回收时,将Eden和Survivor中还存活的对象一次性复制到另一个Survivor空间上。然后,清理掉Eden和刚刚使用过的Survivor空间。
3、HotSpot虚拟机默认Eden和Survivor的大小比例为8 : 1,这样每次新生代可用内存为整个新生代的90% (10% + 80%),只有10%的内存会被浪费。

3、标记-整理算法

标记-整理算法分为“标记”和“整理”两个阶段,执行过程如下图所示:
1、标记:首先标记出所有需要回收的对象
2、整理:让所有的存活的对象都向一端移动,然后直接清除掉边界以外的内存。在这里插入图片描述
标记-整理算法 采用和 标记-清除算法 一样的方式进行对象的标记,但后续不直接对可回收对象进行清理,而是将所有的存活对象往一端空闲空间移动,然后清理掉端边界以外的内存空间。

  • 优点:解决了标记-清理算法存在的内存碎片问题。
  • 缺点:仍需要进行局部对象移动,一定程度上降低了效率。

4、分代收集算法

当前商业虚拟机都采用分代收集的垃圾收集算法。分代收集算法,顾名思义是根据对象的存活周期将内存划分为几块。一般包括年轻代、老年代 和 永久代,如图所示:

在这里插入图片描述

新生代(Young generation)

绝大多数最新被创建的对象会被分配到这里,由于大部分对象在创建后会很快变得不可达,所以很多对象被创建在新生代,然后消失。对象从这个区域消失的过程我们称之为 minor GC。
新生代 中存在一个Eden区和两个Survivor区。新对象会首先分配在Eden中(如果新对象过大,会直接分配在老年代中)。在GC中,Eden中的对象会被移动到Survivor中,直至对象满足一定的年纪(定义为熬过GC的次数),会被移动到老年代
可以设置新生代和老年代的相对大小。这种方式的优点是新生代大小会随着整个堆大小动态扩展。

参数 -XX:NewRatio 设置老年代与新生代的比例。例如 -XX:NewRatio=8 指定 老年代/新生代 为8/1. 老年代 占堆大小的 7/8 ,新生代 占堆大小的 1/8(默认即是 1/8)。

老年代(old generation)

对象没有变得不可达,并且从新生代中存活下来,会被拷贝到这里。其所占用的空间要比新生代多。也正由于其相对较大的空间,发生在老年代上的GC要比新生代要少得多。对象从老年代中消失的过程,可以称之为major GC(或者full GC)。

小结

JDK8堆内存一般是划分为年轻代和老年代,不同年代根据自身特性采用不同的垃圾收集算法。

  • 对于新生代,每次GC时都有大量的对象死亡,只有少量对象存活。考虑到复制成本低,适合采用复制算法。因此有了From Survivor和To Survivor区域。
  • 对于老年代,因为对象存活率高,没有额外的内存空间对它进行担保。因而适合采用标记-清理算法和标记-整理算法进行回收。
JVM知识点总结 给每一个对象设置一个引用计数器,当有一个地方引用该对象的时候,引用计数器就+1,引用失效/被释放时,引用计数器就-1;当引用计数器为0的时候,就说明这个对象没有被引用,也就是垃圾对象,等待回收;在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old ),,新生代默认占总空间的1/3,老年代默认占2/3。缺点:增加了空间的消耗,并且无法解决循环引用的问题:当A引用B,B也引用A的时候,此时AB对象的引用都不为0,此时也就无法垃圾回收,所以一般主流虚拟机都不采用这个方法; 阅读详情

相关推荐

AI全景之第八章第三节:时间序列分析与预测技术

摘要 时间序列分析与预测技术从传统统计模型发展到深度学习方法。传统方法包括ARIMA模型(处理趋势和季节性)、指数平滑(加权平均预测)和状态空间模型(概率框架分解)。机器学习方法通过特征工程和树模型提升非线性建模能力。深度学习方法中,RNN/LSTM处理序列依赖,TCN利用因果卷积,Transformer通过注意力机制捕获长程依赖。当前研究趋势结合神经符号方法和生成模型,以提高预测精度和可解释性。不同方法各具优势,需根据数据特性和预测需求选择。

技术引领业务创新 988

JVM之垃圾回收算法详解

JVM之垃圾回收算法详解现有的垃圾回收算法分类垃圾收集器的设计原则标记-清除算法缺点标记-复制算法“Apple回收策略”缺点标记-整理算法缺点总结 现有的垃圾回收算法 分类 根据如何判定对象是垃圾,垃圾回收算法分为两类: 1、引用计数式垃圾收集(判定垃圾是通过引用计数器)别名:直接垃圾收集 2、追踪式垃圾收集(判定垃圾是通过GC Roots)别名:间接垃圾收集 主流虚拟机采用的是第二种追踪式垃圾收集,所以本文讲解第二种垃圾收集的算法 垃圾收集器的设计原则 根据两个分代假说: 1.绝大部分对象是熬不过第一

北洋的博客 4609

AFE芯片做什么用的?AFE(Analog Front End) 模拟前端

AFE采样精度的影响因素非常多,需要综合考虑各种因素,并根据实际应用场景来选择合适的参数和方法。通过减少噪声、提高采样频率、调节放大器增益、降低电源噪声、优化传输线路、进行温度补偿、选择合适的ADC分辨率、根据信号类型选择合适的AFE参数、进行器件匹配和校准等方法,可以提高AFE的采样精度,从而更好地满足各种应用需求。版权声明:本文为优快云博主「czf.Forver」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

学海无涯的专栏 4万+

jvm的垃圾回收算法有哪些

jvm的垃圾回收算法:标记清除、复制、标记整理、分代收集 CMS和G1 垃圾回收的触发时机 老年代空间分配担保规则

qq_39350797的博客 967

华为云Stack扩容实战:从CMDB配置到计算节点增减容,一份避坑指南

本文详细解析华为云Stack扩容实战,从CMDB配置到计算节点增减容的全流程操作指南。通过典型场景案例和避坑建议,帮助企业高效管理计算资源扩容与减容,确保业务连续性。特别针对华为云Stack的弹性扩容能力提供专业指导,涵盖存储、网络及自动化工具链的配合使用。

weixin_30591551的博客 479

在Cursor中集成Ollama与Qwen2.5‑Coder:零成本本地AI开发环境搭建

本文详细介绍了如何零成本搭建本地AI开发环境,通过将Cursor IDE与本地运行的Ollama及Qwen2.5-Coder模型集成,实现数据不出本地的智能编程辅助。教程涵盖Ollama安装、模型拉取、ngrok内网穿透配置及Cursor设置等核心步骤,并提供了实战测试与常见问题排错指南,为注重隐私与成本的开发者提供安全高效的解决方案。

weixin_29296241的博客 1071

Java虚拟机垃圾回收(三) 7种垃圾收集器:主要特点 应用场景 设置参数 基本运行原理

Java虚拟机垃圾回收(三) 7种垃圾收集器 主要特点 应用场景 设置参数 基本运行原理 在《Java虚拟机垃圾回收(一) 基础》中了解到如何判断对象是存活还是已经死亡?在《Java虚拟机垃圾回收(二) 垃圾回收算法》了解到Java虚拟机垃圾回收的几种常见算法。 下面先来了解HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parall...

tjiyu的博客 3万+

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

深入理解 JVM 的几种常见垃圾回收算法

本文详细介绍了 JVM 中几种常见的垃圾回收算法,包括标记-清除算法、复制算法、标记-整理算法和分代收集算法,并探讨了几种常见的垃圾回收器及其适用场景。理解和优化垃圾回收机制,对于提高 Java 应用的性能和稳定性至关重要。

良月柒 1511

2023华为od机试C卷【最富裕的小家庭】C++ 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1238

万字长文解密:SAP Fiori 首屏加载缓慢背后的真相

什么是一个健康理想的 Fiori 首次加载状态?FLP 首页不臃肿,用户默认看见的内容不多但足够用缓存作业按规则运行,冷启动不至于每次都从零开始应用首屏只读必要数据,UI5 资源经过 preload,视图异步加载OData 服务字段克制、分页合理、缓存分层清楚后台 CDS 与 HANA 只为当前屏幕做最必要的工作。只要这些标准同时满足,用户第一次打开 Fiori 页面的体感通常会从明显卡顿变成可接受甚至顺滑。

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

jvm虚拟机中常用的几种垃圾回收算法

Java语言是不需要程序员手动管理内存的,jvm虚拟机自动管理内存,进行垃圾回收,这里说几种常用的垃圾回收算法以 1. 复制算法: 此算法把内存空间分为两个相等的区域,每次只使用其中一个区域,垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一块区域当中,此算法每次只处理正在使用中的对象,因此复制成本比较小,同时复制过去以后还能进行相应的内存整理,不会出现碎片问题,缺点是需要两倍的内存空间...

大房子爱生活的博客 544

11-16 Fluent结果查看及后处理功能(做动画、监控点)

监控点、面及动画操作

zheaa的博客 1万+

JVM主要的几种垃圾回收算法

然后,在整理阶段(Compact),将存活的对象压缩(Compact)到堆的一端,以释放不连续的内存空间。垃圾回收器通过追踪GC Roots对象的引用链,可以确定哪些对象是可达的,而哪些对象是不可达的,从而进行垃圾回收操作。: 在垃圾回收时,以 GC Roots 对象为根对象开始遍历对象图,确定哪些对象是可达的(即不会被回收),而哪些对象是不可达的(即可被回收)。JVM 内存模型中程序计数器、栈、本地方法栈这 3 个区域是线程私有的,与线程同生共死,不涉及回收,所以垃圾回收的就在剩下的堆和方法区中了,

J 博客 1279

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JVM的几种常见垃圾回收算法

引言:Java Virtual Machine(JVM)作为Java程序运行的核心,其垃圾回收(Garbage Collection, GC)机制在内存管理中起着至关重要的作用。垃圾回收算法是JVM性能优化的重要方面。本文将详细介绍几种常见的垃圾回收算法,包括标记-清除(Mark-and-Sweep)、复制(Copying)、标记-整理(Mark-and-Compact)、分代收集(Generational Collection)和G1(Garbage-First)等。

2201_75437633的博客 1342

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

JVM垃圾回收算法和几种JVM垃圾收集器

一、JVM垃圾回收算法注意:只是简单总结,不详细解释算法概念,不理解自行百度。1、复制算法2、标记-清理算法3、标记-整理算法4、两个概念:新生代:初始对象,一般是采用复制算法,需要重点掌握理解,内存被分为一个Eden,两个Survivor区。永久代:长时间存在的对象。整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。二、几种JVM垃圾收集器1、新生代串行收集器,采用复制算法;2、老...

fyrcarry的博客 572

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

JVM垃圾收集-回收算法与几种垃圾收集器

文章目录引言怎么判定对象死了垃圾收集算法1.标记-清除算法:2.复制算法3.标记-整理算法4.分代收集算法HotSpot怎么发起垃圾收集几种垃圾收集器 引言 作为Java程序猿,开发过程中根本不必care垃圾回收的事情,但是当需要排查内存溢出、内存泄漏的问题,或者垃圾收集成为系统达到更高并发量的瓶颈是,就需要对这些“自动化”的技术实施必要的监控和调节。另外作为面试必问,还是很有必要掌握的。这篇文章介绍 1.哪些内存需要回收 2.垃圾回收算法 3.HotSpot 什么时候发起回收动作 4.几种常用的垃圾收集器

weixin_41840881的博客 845

几种GC算法,JVM垃圾回收

1.判断对象是否已死   ①:引用计数法 程序给对象添加一个引用计数器,每有一个变量引用它时,计数器值加1。当引用断开时,计数器值减1。计数器为0时,表示没有任何变量引用它,该对象就是死亡状态。   ②:可达性分析法 GC roots 垃圾收集的起点,(打个比方,以GC roots 为起点,能到达的对象不会回收,不能到达的会进行下一步判断,没有覆盖object的finaliz...

diaopu7021的博客 206

java垃圾回收器及其算法_JVM垃圾回收几种常见算法和常见收集器

上文我们讲解了需要考虑垃圾回收的内存结构、类型,垃圾回收基础算法和垃圾回收的时机。接下来我们重点研究下几种常见的垃圾回收算法和垃圾收集器。I垃圾回收算法几种常见的垃圾回收算法:标记——清除算法、复制算法、标记——整理算法和分代回收算法。标记——清除算法标记——清除算法的基本思想跟它的名字一样,分为“标记”和“清除”两个阶段;首先标记(判断对象是否回收需要两次标记,遵循上文提到的原则)出所有需要回收...

weixin_39641103的博客 328

Java虚拟机JVM常用的几种回收算法和垃圾回收器

垃圾回收分为nin 1. 垃圾回收算法 1.1 Serial算法 单线程

走过路过不要错过 500

JVM垃圾回收机制,GC发生在JVM哪部分,有几种GC,它们的算法是什么?

JVM垃圾回收机制,GC发生在JVM哪部分,有几种GC,它们的算法是什么? GC发生在JVM哪部分? GC发生在堆中 有几种GC? GC是什么(分代收集算法) GC有两种:Minor GC和Full GC 次数上频繁收集Yong区 Minor GC 次数上较少收集Old区 Full GC 基本不动Perm区 GC的算法? 引用计数法 复制算法(Copying) 年轻代中使...

zhangxuelong461的博客 1431

判断大小简单算法_JVM垃圾回收几种常见算法和收集器

上文JVM垃圾回收基本原理和算法(一)我们讲解了需要考虑垃圾回收的内存结构、类型,垃圾回收基础算法和如何判断对象是否存活。接下来我们重点研究下几种常见的垃圾回收算法和垃圾收集器。垃圾回收算法几种常见的垃圾回收算法:标记——清除算法、复制算法、标记——整理算法和分代回收算法。标记——清除算法标记——清除算法的基本思想跟它的名字一样,分为“标记”和“清除”两个阶段;首先标记(判断对象是否回收需要两次标...

weixin_39983554的博客 84

JVM中的垃圾回收算法

在Java虚拟机(JVM)中,垃圾回收(Garbage Collection, GC)是自动内存管理的核心机制,负责回收不再使用的对象以释放内存。以下是几种垃圾回收器的原理及优缺点:

2402_84949062的博客 1021

jvm之垃圾回收

jvm中的垃圾回收,介绍了相关的概念,说明了几种基本的垃圾回收器的特点和机制,对G1做了简单的介绍

xing_S的博客 1843

JVM垃圾回收机制(JAVA)

JAVA提供了垃圾回收机制,将原来开发者的手动工作转为自动管理。JVM通过垃圾回收器(Garbage Collection,GC)来回收堆和方法区中的内存,这个过程是自动执行的。垃圾回收包含三个核心问题:哪些内存需要回收?什么时候回收?如何回收?

qq_36458536的博客 3059
上一篇: ConcurrentHashMap源码分析
下一篇: JVM 类加载机制及双亲委派模型
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值