当前位置:首页 > 科技  > 软件

不同编程语言的 GC 机制对比

来源: 责编: 时间:2024-04-24 17:33:52 107观看
导读大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。垃圾回收(Garbage collection,简称 GC)是内存管理中一个非常重要的话题,不管是何种编程语言,GC 的目标都是相同

大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。1mA28资讯网——每日最新资讯28at.com

垃圾回收(Garbage collection,简称 GC)是内存管理中一个非常重要的话题,不管是何种编程语言,GC 的目标都是相同的,即准确高效地识别和清理内存中的垃圾对象。1mA28资讯网——每日最新资讯28at.com

不同编程语言在实现思路上有相似之处,又各自有不同的侧重点,接下来我们对比 Python、Java 和 Go 的 GC 机制来展开聊聊。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

Python的垃圾回收特点

1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

1.引用计数机制为主要策略

Python 通过ob_refcnt字段,追踪对象被引用的次数,当计数减至零时,对象生命终结,即刻被垃圾回收机制回收。1mA28资讯网——每日最新资讯28at.com

这种方式简单明了,即时回收无用对象,避免了程序中长时间占用无用内存的问题,但其自身不能处理循环引用。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

2.标记-清除解决循环引用

Python 辅以标记-清除算法,主要处理容器对象的循环引用问题。Python 中的垃圾回收器会周期性地执行,扫描对象,标记所有从根对象集合开始可访问到的对象,未被标记的对象即被认定为垃圾,进行清除。1mA28资讯网——每日最新资讯28at.com

这种方式确保了即使在复杂关联关系中,内存也能得到有效管理与释放。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

3.分代回收优化性能

为了减少引用计数和标记-清除乃至内存整体的管理开销,Python 引入了分代回收机制,该机制将对象分为不同的代(通常是三代),假设对象存活时间越长,越不可能成为垃圾,因此新生代的对象频繁检查回收,老年代对象检查回收频率则低,这样可以大幅减少垃圾回收带来的性能损耗。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

Java的垃圾回收特点

1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

1.可达性分析

Java 垃圾回收器根据从 GC Root 开始的引用链,判定对象是否可达。1mA28资讯网——每日最新资讯28at.com

所谓 GC Root,包括类静态属性、活动线程、JNI 引用等。若对象在引用链上,则视为可达;反之,视为垃圾。这种分析方法摒弃了引用计数的局限,有效避免了循环引用问题。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

2.分代回收机制

Java 内存空间被划分为年轻代、老年代和永久代(后改进为元空间),这样的分代机制让 Java 的垃圾回收更高效。1mA28资讯网——每日最新资讯28at.com

年轻代适用更快的垃圾回收算法,因为年轻代对象生命周期短,死亡速度快。对于老年代,由于其包含生命周期长的对象,因此使用不同的回收策略,减少回收频率,节约系统资源。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

3.多种垃圾回收器选择

Java 提供了多种垃圾回收器,比如 Serial、Parallel、CMS、G1 及 ZGC 等,应对不同的使用场景。1mA28资讯网——每日最新资讯28at.com

比如,Serial 适合客户端模式,而 G1 垃圾回收器更适合需要大内存、多核服务器环境使用,实现了高并发和低停顿时间,它们各取所长,为开发者提供了丰富的内存管理选项。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

4Go的垃圾回收特点

1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

1.三色标记法

Go 语言自 v1.5 以来,采用了三色标记法,在程序运行期间进行垃圾回收,程序执行并未完全中断,这一并发垃圾回收机制提高了回收效率。1mA28资讯网——每日最新资讯28at.com

在操作中,对象在初始被视为白色(可能是垃圾),然后可达对象在遍历过程中变为灰色(待处理)和最终的黑色(存活对象),未标记到的对象即为垃圾,准备被回收。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

2.三色不变性

在垃圾收集领域,三色不变性是并发标记算法中的一个重要概念。想要在并发或者增量的标记算法中保证正确性,我们需要达成以下两种三色不变性(Tri-color invariant)中的一种:1mA28资讯网——每日最新资讯28at.com

  • 强三色不变性 — 黑色对象不会指向白色对象,只会指向灰色对象或者黑色对象;
  • 弱三色不变性 — 黑色对象指向的白色对象必须包含一条从灰色对象经由多个白色对象的可达路径;

它确保了在整个标记过程中,不会错误地回收还在使用的对象。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

3.混合写屏障

混合写屏障正是基于三色不变式的一种优化实践,它在 Go 的垃圾收集器中负责在并发标记阶段维护三色不变式的正确性。在 Go v1.8 中引入后,混合写屏障结合了“插入”和“删除”屏障的策略,巧妙地减少了因为程序的运行而带来的标记干扰。1mA28资讯网——每日最新资讯28at.com

插入屏障是指在对象引用时进行干预,而删除屏障则是在对象引用被删除时进行操作。通过这一策略,Go 确保了在对象图的动态变化下,也不会因为遗漏对新活对象的标记或错误地标记死对象而破坏垃圾收集的准确性,这是并发收集算法中的一个巨大突破。1mA28资讯网——每日最新资讯28at.com

1mA28资讯网——每日最新资讯28at.com

小结

垃圾回收机制在内存管理中发挥着核心作用,有效地回收内存中的废弃对象。1mA28资讯网——每日最新资讯28at.com

本文比较了 Python、Java 和Go 三种编程语言的垃圾回收策略。1mA28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-85227-0.html不同编程语言的 GC 机制对比

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 深入探索C++联合体Union的神奇用法

下一篇: 呀,Python中居然还有字典推导式

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • K6:面向开发人员的现代负载测试工具

    K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 2023 年的 Node.js 生态系统

    2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • Golang 中的 io 包详解:组合接口

    Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 腾讯盖楼,字节拆墙

    腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    华为开发者大会2023日程公开:开设鸿蒙HarmonyOS 4体验区

    IT之家 7 月 31 日消息,华为今日公布了 HDC.Together 开发者大会 2023 的详细日程。整场大会将于 8 月 4 日-6 日之间举行,届时将发布最新一代鸿蒙 H
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top
Baidu
map