常见软件的GC算法解析

本文详细解析了常见软件的GC算法,包括GC的定义、过程及重要阶段——标记、移动和压缩。讨论了为什么GC时需要移动对象至另一空间,以及如何减少GC次数。分别探讨了.NET、V8和JVM的GC设计,如.NET的三代分区、V8的半空间翻转和JVM的Eden-Survivor空间策略,强调了不同设计背后的权衡和目标。
摘要由CSDN通过智能技术生成

今天和大家一起解析下常见的GC算法设计。


什么是GC

GC是一种软件进行自动的内存回收的方式。

如果软件运行过程中,发现某些对象没有了引用(或者称之为不可达)的状态时,就会启动GC过程。将这部分内存进行释放。以避免程序员因为忘记显示释放内存导致程序出现out of memory。

GC的过程

GC的过程主要分为标记、移动和压缩

标记

软件先分析堆中的所有内存对象,判断是否“存活”。

如果一个对象没有保持着被其他存活对象引用,就需要被清理

移动

将标记为存活的对象移动到另一个内存空间(老生代)

压缩

由于内存清理之后会出现很多碎片(非连续的小段可用内存),因此往往需要对其进行移动,确保大块的内存可用空间。(有时候移动和压缩会放在一起操作)

在这里插入图片描述

GC算法分析

为什么GC时要移动对象至另一空间

这里我们先思考一个问题,为什么需要把存活的对象移动到另一个内存空间。

首先,GC是一个非常耗性能的过程。

因为在GC过程中,你的程序中各个对象的引用指向的内存地址可能发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值