• go——垃圾回收机制(GC)


    GC实现原理?

    什么是GC

    垃圾回收也称为GC (Garbage Collection),是一种自动内存管理机制

    在应用程序中会使用到两种内存,分别为堆(Heap)和栈(Stack) , GC负责回收堆内存,而不负责回收栈中的内存:栈是线程的专用内存,专门为了函数执行而准备的,存储着函数中的局部变量以及调用栈,函数执行完后,编译器可以将栈上分配的内存可以直接释放,不需要通过GC来回收。堆是程序共享的内存,需要GC进行回收在堆上分配的内存。

    垃圾回收器的执行过程被划分为两个半独立的组件:

    1.赋值器(Mutator)∶这一名称本质上是在指代用户态的代码。因为对垃圾回收器而言,用户态的代码仅仅只是在修改对象之间的引用关系,也就是在对象图(对象之间引用关系的一个有向图)上进行操作。
    2.回收器(Collector):负责执行垃圾回收的代码。


    主流算法

    1.引用计数:

    为每个对象维护一个引用计数,当引用该对象的对象销毁时,引用计数-1,当对象引用计数为О时回收该对象。

    。代表语言:Python、PHP、Swift
    。优点:对象回收快,不会出现内存耗尽或达到某个阈值时才回收。。缺点:不能很好的处理循环引用,而实时维护引用计数也是有损耗的。

    ⒉.分代收集∶

    按照对象生命周期长短划分不同的代空间,生命周期长的放入老年代,短的放入新生代,不同代有不同的回收算法和回收频率。
    。代表语言:Java。优点:回收性能好。缺点:算法复杂

    3.标记-清除:

    从根变量开始遍历所有引用的对象,标记引用的对象,没有被标记的进行回收。

    。代表语言:Golang(三色标记法) 。优点:解决了引用计数的缺点。 。缺点:需要STW,暂时停掉程序运行。

    三色标记法——混合写屏障!这里我就不写了太多了建议看刘丹冰大佬的课!!!!!!!!!!!!!!!!!!!!!


    GC如何可以再次调优思路!!

    1.控制内存分配的速度,限制Goroutine的数量,提高赋值器mutator的CPU利用率(降低GC的CPU利用率)

    2.少量使用+连接string,避免重复扩容!

    3.slice提前分配足够的内存来降低扩容带来的拷贝

    4.避免map key对象过多,导致扫描时间增加

    5.变量复用,减少对象分配,例如使用sync.Pool来复用需要频繁创建临时对象、使用全局变量等

    6.增大GOGC的值,降低GC的运行频率


    如何查看GC信息

    在这里插入图片描述

    在这里插入图片描述
    3.
    在这里插入图片描述
    4.
    在这里插入图片描述

  • 相关阅读:
    ffmpeg源码阅读之avformat_alloc_output_context2
    【探索嵌入式虚拟化技术与应用】— 虚拟化技术深入浅出自学系列
    模型压缩常用方法简介
    【云原生 · Kubernetes】部署kube-apiserver集群
    鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Button)
    Java.lang.Byte类之parseByte(String s, int radix)方法的简介说明
    发送QQ邮件
    【数字】时序逻辑电路的设计
    【示波器专题】示波器的类型
    leetcode 416. Partition Equal Subset Sum 分割等和子集(中等)
  • 原文地址:https://blog.csdn.net/qq_52563729/article/details/126125364