GC垃圾回收

Unity GC垃圾回收 今天记录一些GC相关的知识点,加上一些自己的理解。 英文原文:https://unity3d.com/de/learn/tutorials/topics/performance-optimization/optimizing-garbage-collection-unity-games?playlist=44069 翻译参考:http://www.cnblogs.com/zblade/p/64... 阅读详情

垃圾判断

引用计数算法

给对象加一个引用计数器,有一个地方引用时就+1,引用释放就-1,为0时代表可回收。但是因为无法解决循环引用问题,java虚拟机并没有采用这种方式。

可达性分析算法

通过GC Root对象作为起点,根据对象引用关系,向下搜索,所走过的路径称为引用链,当一个对象到GC Root没有任何引用链相连,证明对象是可回收的。

可作为GC Root的对象:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中 JNI(即一般说的 Native 方法) 引用的对象
    在这里插入图片描述

在判断时对于引用也做了明确的分类:

  • 强引用:类似于 Object obj = new Object(); 创建的,垃圾收集器永远不会回收掉被强引用的对象。
  • 软引用:SoftReference 类实现软引用。在系统要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行二次回收。
  • WeakReference 类实现弱引用。对象只能生存到下一次垃圾收集之前。在垃圾收集器工作时,无论内存是否足够都会回收掉只被弱引用关联的对象。
  • PhantomReference 类实现虚引用。无法通过虚引用决定一个对象的生存时间,唯一目的就是能在这个对象被收集器回收时收到一个系统通知。

垃圾回收

标记清除算法

两步:标记+清除。缺点:效率不高,会产生大量内存碎片,当后面要存储大对象时,如果没有连续的内存空间来存放,就需要扩容或抛出内存溢出的异常。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210409151741869.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phdmFfRkY=,size_16,color_FFFFFF,t_7

复制算法

将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当一块内存用完了,就将还存活着的对象复制到另外一块上,然后清理掉前一块。
在这里插入图片描述

标记整理算法

标记过程与标记清除算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。
在这里插入图片描述

分代收集算法

HotSpot 虚拟机采用的就是分代收集算法。
根据对象存活周期的不同,将内存划分为几块,根据年代的特点来选择最佳的收集算法。当有新的对象创建时,首先使用新生代的初始区(Eden区)和from幸存区(Survivor from),经过一次Young GC后,还存活的对象会通过GC的复制算法移动到to幸存区(Survivor to)(有可能遇到to幸存区没有足够空间存放剩余的存活对象,则将通过分配担保机制筛选出符合一定条件的对象直接进入老年代),然后清理掉初始区和from幸存区,此时在to幸存区的对象年龄+1,当年龄到达某个值时(默认15),会移动到老年代;清理老年代中的对象使用Full GC,采用的标记清除和标记整理算法。
在这里插入图片描述

GC垃圾回收算法 A 持有唯一指向 B 的指针,假设现在将该指针更新到了 C,B 的计数器值变成了 0,计数器变更时,计数器为0的对象会被回收,因此 B 被回收了。内存其实就是一块连续的空间,可以看做一个大数组,这块空间在业务运行时,经常会或零散或整齐的分布一些大大小小的对象,怎么样高效的分配和回收这块空间,同时尽量不影响业务系统的运行,就是GC垃圾回收要做的事,学习了七种基本的GC算法之后,我们更加知道,工程技术中没有“银弹”,没有完美无缺的算法,只有最适合自己业务系统的解法。然后将打上标记的活动对象复制到堆的开头。 阅读详情

相关推荐

SSD之垃圾回收GC

SSD的物理结构和工作原理 SSD是由SSD控制器,FLASH存储阵列,板上DRAM(可选),以及跟HOST接口,诸如SAS、SATA、或者PCIE也就是我们通常说的NVMe磁盘。它的结构图如下: 上面的Nand Flash表示的是Flash颗粒,SSD控制器通过若干个主控通道并行操作这些Flash颗粒,就像RAID0一样,这样可以提高数据写入的并行性以及效率。每一个Flash颗粒又进一步细分为多个block(块),每一个block又包含多个page,在SSD内部,SSD控制器和Flash之间的最小

sinat_22510827的博客 2568

垃圾回收GC

垃圾回收(Garbage Collection, GC)是一种自动管理内存的机制,主要用于回收不再使用的对象,防止内存泄漏,并提高程序的稳定性和可维护性。在程序运行过程中,会不断地分配内存来存储各种数据,当这些数据不再被程序使用时,其所占用的内存就变成了“垃圾”。如果不及时回收这些内存,会导致内存泄漏,最终使程序耗尽系统资源而崩溃。垃圾回收机制的主要目的就是自动检测并回收这些不再使用的内存,让开发者无需手动管理内存的分配和释放,从而降低了编程的复杂度,提高了程序的稳定性和可维护性。GC 由运行时系统。

ydl1128的博客 1235

鸿蒙OpenHarmony【GC垃圾回收】 ArkTS运行

ArkTS运行时是OpenHarmony上应用默认语言运行时,运行着ArkTS、TS、JS语言的字节码和相关标准库,支持解释器、AOT和JIT高效执行方式,并提供完善的跨语言调用接口实现[Node-API],支持多语言混合开发。

adsjgfjha123123的博客 919

【JVM】万字总结GC垃圾回收

在程序运行过程中,会不断创建对象来使用内存,当这些对象不再被引用时,其所占用的内存若不及时释放,会导致内存占用不断增加,最终可能引发内存溢出。GC 机制能自动检测并回收这些不再使用的对象所占用的内存。

MonKingWD的博客 1407

Java GC垃圾回收机制

文章目录一、Java GC二、GC 回收的对象三、GC 回收过程1、图解分代内存1.1 年轻代1.2 年老代1.3 永久代2、图解 GC 回收过程对象分配策略3、Minor GC 和 Full GC 本文内容基于目前使用最广泛的 HotSpot JVM。 参考书籍:《深入理解Java虚拟机:JVM高级特性与最佳实践》–周志明 一、Java GC Java 垃圾回收机制是由 GC(Garbage...

媛测 696

垃圾回收(GC)

垃圾回收是指自动释放不再使用的对象所占内存,以避免内存泄漏、提升程序性能。GC 会扫描堆中不再被引用的对象,并自动回收其占用的内存。JVM 在做 GC 之前,会先搞清楚什么是垃圾,什么不是垃圾,通常会通过可达性分析算法来判断对象是否存活。每个对象维护一个引用计数,引用+1,失效-1,为0即可回收。缺点:循环引用无法解决(Java 不采用)以一些GC Roots为起点,向下搜索能关联到的对象,无法关联的即为垃圾。栈中的引用变量方法区中的静态变量、常量JNI 引用(本地方法)

m0_73748193的博客 1144

Go的GC垃圾回收

Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的,所谓三色标记法实际上就是通过三个阶段的标记来确定清楚的对象都有哪些?对象分为三种颜色标记:黑、灰、白黑对象代表,对象自身存活,且其指向对象都已标记完成灰对象代表,对象自身存活,但其指向对象还未标记完成白对象代表,对象尙未被标记到,可能是垃圾对象标记开始前,将根对象(全局对象、栈上局部变量等)置黑,将其所指向的对象置灰。

2303_79710813的博客 860

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

beyond951的博客 7334

JVM GC垃圾回收算法

jvm垃圾回收算法、安全点机制、oopmap、可达性算法、三色标记

hello world 1590

【深度避坑】Word 提示“内存或磁盘空间不足,保存失败”的真正原因与终极解决方案

这是 Word 2003 时代的老功能⚠现代 Office 使用全新的保存 API(与 OneDrive 深度集成)老插件无法兼容现代保存机制会拦截 Word 的写入流程导致保存动作失败,Word 误以为磁盘坏了,于是报错不是磁盘坏了,是 Word 被插件绊倒了。Word 无法保存 = 加载项冲突(尤其是书法 / 稿纸向导)。永久禁用即可彻底恢复。如果在写毕业论文、要交文档,强烈建议马上检查一下你的加载项,避免后期出现大规模崩溃丢稿。

m0_59029415的博客 3077

MCU启动流程详解

在MCU启动后,系统从flash主存储区开始执行,先将0x08000000地址存放的堆栈栈顶指针赋给SP寄存器,将0x08000004地址存放的Reset_Handler复位向量地址赋给PC寄存器跳转执行系统复位,期间执行System_Initializes函数配置系统时钟,重定位向量表,执行MDK自带库函数__main将RW、ZI数据段从Flash加载到RAM,并跳转至_rt_entry进行Stack和Heap的初始化,最后跳转到熟悉的main函数。

weixin_50827397的博客 1505

Java中GC垃圾回收

垃圾回收(Garbage Collection, GC)是Java自动内存管理的核心机制,负责回收不再使用的对象占用的内存。其核心目标是识别并清理“垃圾对象”(即不可达对象),避免内存泄漏。通过“GC Roots”作为起点,向下搜索引用链。如果对象与GC Roots之间没有引用链相连,则判定为可回收。

qq_40464334的博客 588

锐捷交换机堆叠配置举例

一、组网需求: 1)四台S2628G进行堆叠; 2)设备在堆叠前先设置好优先级; 3)使用光口堆叠的设备如RG-S2928G-E相关配置 二、组网拓扑 三、配置要点: 普通堆叠设备不需要配置,只要把堆叠模块和线缆连接好即可 堆叠模块不支持热插拔,即插在模块连上线缆后不能立即生效,需要重启设备才生效。 如果拔掉堆叠插槽后,想再插上模块堆叠,那么必须重启设备才生效 设备堆叠需要协商参数,时间会比较久,请耐心等待 堆叠时设备建议是...

dongsheng_9234的专栏 8289

JVM——垃圾回收器(GC)详解(一文搞懂垃圾回收器)

JVM——垃圾回收器(GC)详解(一文搞懂垃圾回收器)

xdx_dili的博客 8397

[QMT量化交易小白入门]-三十七、QMT中如何使用类似于通达信中的VBA函数(量化python代码解析)

这段代码主要围绕着在QMT环境中实现类似通达信VBA函数的功能展开,核心功能是基于RSI指标来判断股票的买卖时机,并根据持仓情况进行相应的交易操作。class G():passg = G()这里定义了一个空类G,并创建了该类的实例g。这个实例g将作为全局变量来存储一些在整个程序运行过程中需要共享的数据,例如除复权类型、股票代码、目标数量等。1、使用VBA开发策略时,参数固化的问题会带来一些限制,比如无法修改MA函数的周期参数,只能使用固定周期。

木头大左的博客 1702

UNET改进77:全网首发-添加CFBlock |

本文介绍了在UNet模型中集成CFBlock注意力机制的实现方法。主要分为三个步骤:1) 创建CFBlock模块,包含卷积注意力机制和MLP;2) 在UNet连接处添加注意力模块;3) 在卷积层中嵌入注意力机制。具体实现包括:定义Conv、MLP和ConvolutionalAttention等基础模块,构建CFBlock核心结构;在UNet跳跃连接处插入注意力模块;将注意力机制整合到DoubleConv和Down模块中。该方法通过在不同位置引入注意力机制,可有效提升模型的特征提取能力。代码实现使用PyTor

AIcurator的博客 388

JVM中的GC垃圾回收

文章目录JVM中的GC垃圾回收什么是GC,为什么需要GC早期的垃圾回收行为Java自动内存管理介绍垃圾回收的相关算法标记阶段:引用计数算法引用计数算法的原理引用计数算法的优缺点标记阶段:可达性分析算法GC Roots清除阶段:标记-清除算法清除阶段:复制算法清除阶段:标记-压缩(或标记-整理,Mark-Compact)算法 JVM中的GC垃圾回收 什么是GC,为什么需要GC 什么是垃圾? 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。 为什么需要GC? 如果不及时的对垃圾进行清理

xzy的博客 1713

OpenHarmony开发一个App,安装到BearPi-HM Micro开发板

建议先阅读我们这篇,这里面详细介绍了,以及hap包安装的全过程。本篇是介绍如何开发一个App,然后安装到开发板上,比如hap包,无法安装等问题。

Halifax 1030

GC垃圾回收机制

在java程序运行的过程中,会产生大量的对象,因每个对象所能承担的职责不同所具有的功能不同所以也有着不一样的生命周期,有的对象生命周期较长,比如Http请求中的Session对象,线程,Socket连接等;所以这几个区域的内存分配与回收是确定的,我们不需要管的。当JVM触发GC时,首先会让所有的用户线程到达安全点SafePoint时阻塞,也就是STW,然后枚举根节点,即找到所有的GC Roots,然后就可以从这些GC Roots向下搜寻,可达的对象就保留,不可达的对象就回收。所以,垃圾回收是必须的。

CA优快云的博客 6119

医疗影像配准与融合: 使用MATLAB对医学影像进行配准和融合,实现不同影像模态之间的对准和结构信息融合等

医疗影像配准与融合是医学影像处理的重要技术,它用于将不同来源、不同时间或不同模态的医学影像进行配准和融合,以获得更加完整、准确的患者解剖信息。基于MATLAB的医疗影像配准与融合可以帮助医生更准确地诊断疾病,制定更有效的治疗方案。医疗影像配准与融合是医学影像处理的关键技术,它对于提高医学影像诊断和治疗的准确性至关重要。MATLAB是一种功能强大的数学和科学计算软件,它可以为医疗影像配准与融合提供强大的工具和支持。

走向CTO的路上... 716

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GC 垃圾回收

垃圾回收机制是由垃圾收集器Garbage Collection GC来实现的,GC是后台的守护进程。它的特别之处是它是一个低优先级进程,但是可以根据内存的使用情况动态的调整他的优先级。因此,它是在内存中低到一定限度时才会自动运行,从而实现对内存的回收。这也是垃圾回收的时间不确定的原因 为何要这样设计:因为GC也是进程,也要消耗CPU等资源,如果GC执行过于频繁会对java的程序的执行产生较大的影响(java解释器本来就不快),因此JVM的设计者们选着了不定期的gc。 一、为什么要进行垃圾回收 我们知道J.

栗筝i的博客 3586

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

GC与垃圾回收器

1. 找到内存空间里的垃圾;2. 回收垃圾,让程序能再次利用这部分空间。

weixin_49562509的博客 944

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

垃圾回收,几种GC算法及GC机制

常见垃圾回收算法、GC算法、GC机制

qq_73181349的博客 1361
上一篇: JVM内存模型
下一篇: TCP概述
fufucen
博客等级 码龄8年 2粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值