Rust 基础入门 ——所有权 引言 :垃圾自动回收机制的缺陷。

在以往,内存安全几乎都是通过 GC 的方式实现,但是 GC 会引来性能、内存占用以及 Stop the world 等问题,在高性能场景和系统编程上是不可接受的,

我们先介绍一下这些概念都是什么:
内存安全是指程序在运行过程中不会访问未分配的内存或者已释放的内存,从而避免了内存相关的错误,如空指针引用、野指针等。传统上,内存安全通常通过垃圾回收(Garbage Collection,GC)来实现,GC会自动回收不再使用的内存,但是它会带来一些性能、内存占用和停顿等问题。

在高性能场景和系统编程中,这些问题是不可接受的。因此,一些编程语言(如Rust)提供了其他的内存安全机制,如所有权系统和借用检查器。这些机制允许程序员在编写代码时显式地管理内存,从而避免了GC带来的性能和停顿问题。同时,这些机制还可以在编译期间检查出潜在的内存安全问题,提前发现和修复错误。

Stop the world是指在垃圾回收(Garbage Collection,GC)过程中,程序的执行会被暂停(停顿),直到垃圾回收完成。在这个停顿期间,程序无法继续执行,所有的线程都被暂停。这种停顿会导致程序的响应性下降,特别是在需要实时性能或低延迟的场景下是不可接受的。

Stop the world问题是垃圾回收机制的一个固有问题,因为在进行垃圾回收时,需要遍历整个堆内存,找出不再使用的对象并进行回收。在这个过程中,程序的执行必须暂停,以确保垃圾回收器能够正确地访问和修改堆内存。

为了减少Stop the world问题的影响,一些现代的垃圾回收算法采用了增量式垃圾回收或并发垃圾回收的方式。

  • 增量式垃圾回收将垃圾回收过程分为多个阶段,在每个阶段中只回收一部分对象,从而减少了停顿的时间。
  • 并发垃圾回收则允许垃圾回收器在程序执行的同时进行回收操作,从而减少了停顿的频率和时间。

GC(垃圾回收) 导致的性能和内存问题的大小取决于多个因素,包括垃圾回收算法的选择、垃圾回收的频率和停顿时间等。

  1. 性能问题:GC会在程序运行时自动回收不再使用的内存,但这个过程需要消耗一定的计算资源。垃圾回收的频率和停顿时间会对程序的性能产生影响。频繁的垃圾回收会导致程序的执行速度变慢,因为大量的计算资源被用于垃圾回收而无法用于实际的业务逻辑。此外,垃圾回收过程中的停顿时间会导致程序的响应性下降,特别是在需要实时性能或低延迟的场景下。

  2. 内存问题:GC 会自动回收不再使用的内存,但是在回收之前,这些内存仍然被占用。因此,GC 可能会导致程序的内存占用变大。此外,GC的回收过程可能会导致内存碎片化,使得内存的利用效率降低。

可能有这些问题的部分发生场景:

  1. 游戏开发:在游戏开发中,需要保持稳定的帧率和低延迟,以提供流畅的游戏体验。如果GC频繁触发或停顿时间过长,会导致游戏卡顿或掉帧,影响游戏的流畅度和响应性能。

  2. 实时系统:在实时系统中,需要保证任务的实时性能,即任务必须在规定的时间内完成。如果GC的停顿时间过长,可能会导致任务无法按时完成,影响系统的实时性能。

  3. 金融交易系统:在金融交易系统中,需要保证交易的低延迟和高吞吐量。如果GC频繁触发或停顿时间过长,可能会导致交易执行时间延长,影响交易的实时性能和系统的吞吐量。

  4. 大规模数据处理:在处理大规模数据时,GC 的内存占用可能会变得很大,导致系统的内存资源不足。此外,GC的停顿时间可能会影响数据处理的效率和响应性能。


好了我们了解到了GC 存在的一些问题,接下来,我们将了解 rust 是通过怎样的思想来避免它的。

相关推荐
XLYcmy1 分钟前
高级密码猜测生成器AdvancedPasswordGenerator密码生成器程序详细分析
开发语言·python·算法·网络安全·开发工具·源代码·口令安全
im_AMBER1 小时前
Leetcode 93 找出临界点之间的最小和最大距离
c++·笔记·学习·算法·leetcode
有一个好名字1 小时前
力扣:除自身以外数组的乘积
java·算法·leetcode
bkspiderx2 小时前
C++中的访问控制:private、public与protected的深度解析
开发语言·c++·算法·访问控制·private·public·protected
ullio3 小时前
arc207c - Combine to Make Non-decreasing
算法
ZhuNian的学习乐园3 小时前
LLM对齐核心:RLHF 从基础到实践全解析
人工智能·python·算法
iAkuya3 小时前
(leetcode)力扣100 31K个一组翻转链表(模拟)
算法·leetcode·链表
铭哥的编程日记3 小时前
二叉树遍历的递归和非递归版本(所有题型)
算法
&永恒的星河&3 小时前
告别过时预测!最新时序新SOTA:TimeFilter教会模型“选择性失明”
人工智能·深度学习·算法·时序预测·timefilter·时序算法
闻缺陷则喜何志丹3 小时前
【二分查找】P9029 [COCI 2022/2023 #1] Čokolade|普及+
c++·算法·二分查找·洛谷