jvm垃圾回收相关知识

JVM所有的垃圾回收器整理 Java 垃圾回收器(Garbage Collector,GC)是Java虚拟机(JVM)中的一个重要组件,无论是日常开发,还是技术面试中,它都是一个非常重要的知识点。那么,如何才能系统性地学习 JVM垃圾回收器的相关知识呢?这篇文章,我们整理了过往所有关于 JVM回收器的文章,希望可以帮到你。 阅读详情

1.什么是垃圾回收机制

垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的
一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。

2.什么时候进行垃圾回收

①会在cpu空闲的时候自动进行回收  
②在堆内存存储满了之后  
③主动调用System.gc()后尝试进行回收
补充:System.gc()用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。
它将尝试释放被丢弃对象占用的内存。 然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。
 所以System.gc()并不能说是完美主动进了垃圾回收。

3.如何判断对象已死(或能够被回收)

①引用计数法
简单的来说就是判断对象的引用数量。实现方式:给对象共添加一个引用计数器,
每当有引用对他进行引用时,计数器的值就加1,当引用失效,也就是不在执行此对象,
它的计数器的值随之减1,若某一个对象的计数器的值为0,那么表示这个对象没有被其他对象引用,
也就是意味着是一个失效的垃圾对象,就会被gc进行回收。 但是这种简单的算法在当前的jvm中并没有采用,
原因是他并不能解决对象之间循环引用的问题。 假设有A和B两个对象之间互相引用,
也就是说A对象中的一个属性是B,B中的一个属性时A,这种情况下由于他们的相互引用,从而垃圾回收机制无法识别。
②可达性分析算法(根搜索算法)
通过一系列名为GC Roots的对象作为起点,从这些节点往下搜索,搜索走过的路径称为引用链。
当一个对象到GC Roots没有任何引用链相连时(意味着GC Roots到这个对象不可达),
证明该对象是不可用的,则应该被回收
在这里插入图片描述

4.垃圾回收算法的种类

按照方法分类:

①标记-清理算法

分为两个步骤:第一就是标记,也就是标记所有的需要回收的对象;第二就是清理,标记完成后进行统一的回收带有标记的对象占据的内存空间。缺点是效率问题,还有一个致命的缺点就是空间问题,标记清除之后会产生大量不连续的内存碎片,当程序在运行过程中需要分配较大对象时,无法找到足够的连续内存而造成内存空间浪费。
在这里插入图片描述

②复制算法

复制算法是将内存容量划分为大小相等的两块,每次只使用其中的一块。当一块内存用完之后,就将还存活的对象复制到另一块上面,然后再把已使用的内存空间一次性清理。这样使得每次都对其中的一块进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只是这种算法的代价就是将内存缩小为原来的一半了。
在这里插入图片描述

③标记-整理算法

标记整理算法与标记清除算法很相似,但显著的区别是:标记清除算法仅对不存活的对象进行处理,剩余存活对象不做任何处理,这就造成了内存碎片的问题;而标记整理算法不仅对不存活的对象进行清除,还对存活的对象进行重新整理,因此不会产生内存不连续的现象。
在这里插入图片描述

按照回收策略分类

分代收集算法

分代收集算法是一种比较智能的算法,也是现在jvm使用最多的一种算法,它本身其实不是一个新的算法,而是他会在具体的场景自动选择以上三种算法进行垃圾对象回收。在jdk1.7之前,对JVM分为三个区域:新生代、老年代、永久代

①新生代

新生代的目标就是尽可能快速的收集掉那些生命周期较短的对象,一般情况下新生成的或者朝生夕亡的对象一般都是首先存放在新生代里面。
在这里插入图片描述
新生代将内存按照8:1:1分为一个Eden和so,s1三个区域;大部分对象都在Eden区域生成,在垃圾回收时,先将Eden存活的对象复制到s0区,然后清除Eden区,当这个s0区满了,则将Eden区和s0区的存活对象复制到s1,然后将Eden和s0区清空,此时s0是空的,然后交换s0和s1的角色(即下次回收会扫描eden和s1区),即保持s1为空,如此往复;特别地,当s1不足以存放Eden和s0存放的对象时,则将对象直接放到老年代)

适用回收算法:复制算法

在新生代中,每次垃圾回收都有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成垃圾收集

②老年代

老年代一般存放的是一些生命周期较长的对象,比如在新生代中经历来了n次垃圾回收后仍然存活的对象都进入了老年代。

适用回收算法:标记整理或标记清除

在老年代中因为对象存活率较高,没有额外的空间对它分配担保,就必须使用标记清除或标记整理

③永久代

永久代主要存放静态文件,如java类,方法等,永久代对垃圾回收没有显著影响。
在这里插入图片描述
转载于

香橙派5上跑DeepSeek-R1的避坑指南:从模型下载到NPU加速全流程解析 本文详细解析了在香橙派5(RK3588)上部署DeepSeek-R1蒸馏模型的完整流程与优化技巧。内容涵盖从系统配置、RKLLM工具链编译、模型转换到NPU加速调优的全过程,重点分享了如何利用RK3588的NPU算力实现高效推理,并提供了常见问题的解决方案,为边缘设备部署LLM提供了实用指南。 阅读详情

相关推荐

UE4项目迁移指南:如何无缝导入外部.uasset文件并保持材质关联

本文详细解析了将外部.uasset文件无缝导入UE4项目的专业方法。针对手动复制文件时常见的材质关联丢失问题,提供了使用引用查看器进行诊断和修复的实用技巧,并推荐使用引擎内置的“迁移”功能确保资源依赖关系的完整性,帮助开发者高效整合项目资源。

t8u9v0的博客 1045

浅谈JVM垃圾回收器相关知识点

万字长文总结JVM垃圾回收器相关知识点一、先说JVM内存模型二、引出JVM调优的目标——对象1、逃逸分析分配在栈上2、大量的对象被分配在eden区3、大对象直接进入老年代4、动态年龄判断三、寻找垃圾对象算法1、引用计数法2、可达性分析算法四、回收垃圾对象算法1、分代收集理论2、分区收集理论3、增量收集算法五、处理垃圾对象算法的垃圾回收器1、传统垃圾回收器2、CMS(重要)1)清理流程2)并发标记——三色标记3)重新标记——多标、漏标3、G11)基础介绍2)清理流程3)YoungGC4)MixedGC5)Fu

持续Java学习中 798

远程桌面(RDP)共享USB设备全攻略:不止Hyper-V,你的加密狗和CH340串口也能远程用

本文详细介绍了远程桌面(RDP)共享USB设备的完整解决方案,包括加密狗和CH340串口设备的远程使用技巧。通过RemoteFX USB重定向技术,用户可以在远程会话中无缝使用本地USB设备,提升工作效率。文章涵盖企业级配置、典型设备实战案例及高级故障排除方法,是远程工作者的实用指南。

weixin_42522964的博客 332

JVM系列之JVM垃圾回收算法相关知识

今天给大家继续分享JVM垃圾回收算法相关知识。JVM垃圾回收算法主要有标记清除、复制算法、标记整理、分代收集四种,下面来逐一介绍。

m0_73257876的博客 213

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 202

CentOS 7 离线升级 OpenSSH 9.9p2 保姆级教程(含依赖包下载与常见报错解决)

本文提供了一份详尽的CentOS 7系统离线升级OpenSSH至9.9p2版本的完整教程。针对无外网环境,重点讲解了依赖包(尤其是OpenSSL 3.x)的离线下载与编译部署,并深入解决了编译过程中常见的“libcrypto.so缺失”等动态库链接错误。教程涵盖从环境准备、源码编译、服务配置到系统集成的全流程,最后还提供了关键的回滚方案与应急预案,是运维人员在内网环境中进行安全加固的实用指南。

weixin_29248313的博客 323

jvm垃圾回收相关的知识点

一.首先是我们判断是否是垃圾的两个算法,引用计数法和可达性分析算法。 引用计数法:如果一个对象被其他对象引用,那么这个对象就会计数加1,什么时候计数为0的时候就代表了该对象未被引用,代表它是垃圾,缺点有频繁的计数,浪费性能,最重要的是如果存在循环依赖问题,他们的引用计数始终为1,但是他们可能是没有用处的,引用计数法无法处理。 可达性分析算法,以我们的根上的对象为起点,向下寻找,如果找到的就是可达的对象,表明不用被清理的对象,而没有被找到的就会被清理。现在jvm主要使用的就是这个算法。 二.如何清理垃圾

m0_49708063的博客 454

Unity游戏Google Play闪退?可能是这个隐藏设置惹的祸(附完整解决方案)

本文深度解析Unity游戏在Google Play上出现闪退的疑难问题,指出其根源可能在于Google Play后台的“应用完整性”设置与游戏原生库的冲突。文章提供了从崩溃日志分析、本地与线上版本对比测试,到调整Unity构建设置、审查第三方插件以及优化分发包配置的系统性排查与根治方案,帮助开发者彻底解决这一隐蔽问题。

weixin_29213827的博客 233

JVM垃圾回收相关知识笔记

上次说到jvm的内存模型,也就是说对象存在的区域。因为代码是循环往复的执行。也就是创建对象是肯定得。因此堆和方法区(元空间)肯定要兼容不断产生的新对象。而且还要保证效率。但是考虑到我们的...

tianjingle 155

硬件测试实战笔记:SI/PI 到底测什么,怎么测?一文讲清

点选错了,数据越精确越误导。

qq_52293640的博客 245

手把手教你学simulink实例--基于Simulink的船舶动力定位系统建模与仿真

船舶动力定位系统(Dynamic Positioning System, DPS)是一种通过控制推进器来保持船舶在指定位置和航向的技术。它广泛应用于海上钻井平台、海洋调查船、起重船等需要精确位置控制的场景。DPS的核心任务是实时感知环境干扰(如风、浪、流),并通过闭环控制算法调整推进器输出,以抵消外界扰动并维持船舶的位置和姿态。本项目旨在基于MATLAB/Simulink平台,构建船舶动力定位系统的数学模型,并进行仿真分析,验证其性能和稳定性。

MHD0815的博客 1082

JVM组成,JVM类加载,JVM垃圾回收器,JMM相关知识

Java 可以实现一次编写,到处运行 -> JVM (帮我们处理不同硬件之间的差异) Flutter 面试题:为什么大对象会直接放到老年代? 答:因为大对象的创建和销毁锁需要的时间比较多,所以性能也比较慢,如果存到新生代,那么可能导致频繁的创建和销毁大对象,从而导致整个JVM运行速率的降低,所以旧直接将大对象存到老年代。 ...

weixin_51392818的博客 545

Test软件:Keysight二次开发_(3).安装与配置开发环境

在开始进行Keysight软件的二次开发之前,首先需要确保您的开发环境已经正确安装和配置。本节将详细介绍如何安装和配置必要的开发工具和依赖项,以便您能够顺利进行开发工作。

2401_87715305的博客 1413

Java --- JVM之垃圾回收相关知识概念

3、在JDK 1.2版之后,Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用( Phantom Reference)4种,这4种引用强度依次逐渐减弱。1、软引用是用来描述一些还有用,但非必需的对象。4、对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为null,就是可以当做垃圾被收集了,当然具体回收时机还是要看垃圾收集策略。

qq_46093575的博客 740

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

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JVM相关知识——内存分布和垃圾回收机制

JVM概念及面试须知

qq_45864756的博客 641

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

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

JVM系列(十):JVM垃圾回收算法相关知识

今天给大家继续分享JVM垃圾回收算法相关知识,如有不对的地方欢迎指正。 JVM垃圾回收算法主要有标记清除、复制算法、标记整理、分代收集四种,下面来逐一介绍。

IT技术分享社区 269

蓝牙模块HM-10手册

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

JVM相关知识二(垃圾回收机制)

垃圾回收机制是JVM中帮助程序员管理内存的一种辅助机制,它会自动回收内存,释放内存空间,防止内存泄露。

Linxz1999的博客 113

虚拟机垃圾回收相关知识整理(JVM GC)

Java内存区域介绍 Java内存区域有如下几部分构成 1、程序计数器:指示的是当前正在执行的机器指令的地址。 2、本地方法栈:通过JNI调用本地方法时根据语言的类型建立相应的栈。 3、Java栈 Java栈是每个线程私有的,每个线程都有一个Java栈,栈中存放着一系列的栈帧(Stack Frame),JVM只能压入(push)和弹出(pop)栈帧这两

chaoqunwangzi 432

Java必突-JVM知识专题(二):Java堆内存+JVM的垃圾回收机制是用来干什么的+JVM分代模型:年轻代、老年代、永久代、方法区内会不会进行垃圾回收呢?+JVM内存相关的几个核心参数图解

前言: 1.JVM的垃圾回收机制是用来干什么的? 2.为什么要垃圾回收? 3.创建的这些对象,到底在Java堆内存中会占用多少内存空间呢? 4.JVM分代模型:年轻代、老年代、永久代、方法区内会不会进行垃圾回收呢? 5. 对象到底什么时候进入新生代? 6.什么情况下会进入老年代? 7. JVM内存相关的几个核心参数图解、如在启动系统的时候设置JVM参数呢? 8.如果是线上部署系统应该如何设置JVM参数呢? 9.自己负责的线上系统,到底如何合理设置JVM内存大小? 1.JVM的垃圾回收机制是用来干什么的?

weixin_46950473的博客 293

JVM相关-JVM模型、垃圾回收、JVM调优

JVM相关-JVM模型、垃圾回收、JVM调优

qq_46788415的博客 2388

万字长文,说清JVM垃圾回收,让内存管理不再黑盒

万字长文,说清JVM垃圾回收,让内存管理不再黑盒

ly853602的博客 1137

JVM垃圾回收机制等--好文记录

垃圾回收算法和垃圾收集器以及我认为JVM垃圾回收机制中好的文章记录 https://blog.csdn.net/weixin_41949328/article/details/105377041 http://www.360doc.com/content/20/0423/13/58006001_907857377.shtml 下面的是两篇连续的文章 https://juejin.im/post/6844904070788939790 https://www.lagou.com/lgeduartic

YP~杨小西 239

JVM垃圾回收总结

JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

lonelyVM的博客 152

【面试必备】JVM垃圾回收算法

CMS会产生浮动垃圾 CMS产生浮动垃圾过多时会退化为serial old,效率低,因为在上图的第四阶段,CMS清除垃圾时是并发清除的,这个时候,垃圾回收线程和用户线程同时工作会产生浮动垃圾,也就意味着CMS垃圾回收器必须预留一部分内存空间用于存放浮动垃圾 而G1没有浮动垃圾,G1的筛选回收是多个垃圾回收线程并行gc的,没有浮动垃圾的回收,在执行‘并发清理’步骤时,用户线程也会同时产生一部分可回收对象,但是这部分可回收对象只能在下次执行清理是才会被回收。新生代并行收集器,追求高吞吐量,高效利用 CPU。

m0_67740632的博客 1562

JVM垃圾回收、优化(二)

在上一篇文章中介绍了传统垃圾回收器的执行流程,本文主要介绍上篇文章中提及的垃圾回收器中存在的问题点。第一篇:垃圾判断方法;垃圾清除算法;jvm中传统垃圾回收器;各个垃圾回收器的组合;文章跳转第二篇:oopMap、安全点、安全区、记忆集、三色标记法以及存在的问题;ZGc、Shenandoah介绍;第三篇:VisualVM工具使用,内存分析。

m0_59236433的博客 874

GC Java垃圾回收

GC Java垃圾回收个人笔记,课程源自马士兵教育GC公开课

bcpx819的博客 226
上一篇: spring boot学习总结1(基础知识)
下一篇: 分布式事务的简单介绍
意田天
博客等级 码龄7年 41粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值