Golang内存分配及垃圾回收

这篇具有很好参考价值的文章主要介绍了Golang内存分配及垃圾回收。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 Golang内存分配及垃圾回收,golang,开发语言,golang

Golang内存分配及垃圾回收,golang,开发语言,golang

为什么需要垃圾回收?

自动释放不需要的对象,让出存储器资源,无需程序员手动执行
Go V1.3之前是标记-清除算法

具体步骤

缺点:程序卡顿、扫描整个heap、数据清除会产生heap碎片

V1.3之后,做了简单的优化

Golang内存分配及垃圾回收,golang,开发语言,golang

V1.5之后,使用三色并发标记法

只要是新创建的对象,默认颜色都是白色

触发条件:当一个白色对象被黑色对象引用(白色对象挂在黑色对象下面) 且 灰色对象与它之间可达关系的白色对象遭到了破坏。 

引入了屏障机制

强三色不变性:强制性不允许黑色对象引用白色对象

弱三色不变性:所有被黑色对象引用的白色对象都处于灰色保护状态

为了遵循上述的两种方式,有两种方式,插入屏障,删除屏障

插入屏障:在A对象引用B对象的时候,B对象被标记为灰色(讲B挂在A下游,B必须被标记为灰色),满足强三色不变式。 

黑色对象的内存槽有两种位置,栈和堆,栈的特点是空间容量比较小,要求相应的速度快,因为函数调用弹出频繁,所以“插入屏障”机制在栈空间的操作对象中不使用,而仅仅在堆空间对象的操作中。

删除屏障,具体操作:被删除的对象,如果自身为灰色或者白色,那么被标记为灰色。满足:弱三色不变性(保护灰色对象到白色对象的路径不会断)文章来源地址https://www.toymoban.com/news/detail-542775.html

到了这里,关于Golang内存分配及垃圾回收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。

    2023-05-26:golang关于垃圾回收和析构的选择题,代码如下: 代码的运行结果是什么?并说明原因。注意析构是无序的。 A. 结束 B. a被回收--b被回收--结束 C. b被回收--a被回收--结束 D. B和C都有可能 golang的垃圾回收算法跟java一样,都是根可达算法。代码中main0函数里a和b是互相引

    2024年02月06日
    浏览(46)
  • Golang中的New和Make:内存分配与初始化的区别

    摘要:本文将深入探讨Golang中的 New 和 Make 函数在内存分配和初始化方面的区别。我们将通过理论阐述和示例代码来解释这两个函数的作用,并帮助读者更好地理解它们在实际编程中的应用。 在Golang中, New 和 Make 是用于内存分配和初始化的重要函数。虽然它们都涉及到内存

    2024年02月08日
    浏览(33)
  • 编写C语言程序,模拟实现首次/最佳/最坏适应算法的内存块分配和回收,要求每次分配和回收后显示出空闲分区和已分配分区的情况。假设初始状态下,可用的内存空间为640KB。(江西师范大学软件学院 操作系统)

    为了实现动态分区分配,通常将系统中的空闲分区链接成一个链。所谓顺序查找是指依次搜索空闲分区链上的空闲分区,去寻找一个大小能满足要求的分区。 --------计算机操作系统(第四版) 可变分区也称动态分区,在指作业装入内存时,从可用的内存中划出一块连续的区域

    2024年02月08日
    浏览(44)
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(45)
  • jvm垃圾回收及内存模型

    1、了解垃圾回收之前,必须先了解内存模型 jdk1.8后,元空间是 方法区的具体实现 (方法区是规范,之前叫永久代)   1)运行时常量池  就是字节码生成的Class对象包含上述的常量池       2、垃圾回收区域    a、 首先要标记垃圾,找出垃圾      b、Java垃圾回收(一)_java 垃

    2024年02月08日
    浏览(55)
  • 2.6. Java内存管理与垃圾回收

    2.6.1. Java内存模型 在Java中,内存被划分为以下几个区域: 堆(Heap):存储对象实例和数组,是垃圾回收的主要区域。 栈(Stack):存储局部变量和方法调用。每个线程有自己的栈。 方法区(Method Area):存储类信息,如类的结构、方法、字段等。 本地方法栈(Native Method

    2024年02月07日
    浏览(40)
  • JVM之内存与垃圾回收篇2

    PC Register是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError的区域。 为什么要有PC寄存器? 因为CPU会在不同的线程之间来回切换,切换回来之后,需要知道接着从哪里开始执行。 JVM字节码解释器需要通过改变PC寄存器中的值来明确下一条应该执行什么样的字节码指令。

    2024年02月17日
    浏览(50)
  • JVM—内存管理(运行时数据区)、垃圾回收

    当JVM类加载器加载完字节码文件之后,会交给执行引擎执行,在执行的过程中会有一块JVM内存区域来存放程序运行过程中的数据,也就是我们图中放的运行时数据区,那这一块运行时数据区究竟帮我们做了哪些工作?我们常说的线上内存泄漏和内存溢出是因为什么?我们今儿

    2024年02月13日
    浏览(41)
  • JVM学习之内存与垃圾回收篇1

    2000年,JDK 1.3发布,Java Hot Spot Virtual Machine正式发布,成为Java的默认虚拟机。 2006年,JDK 6发布。同年,Java开源并建立了OpenJDK。顺理成章,Hotspot虚拟机也成为了OpenJDK中的默认虚拟机。 2008年,Oracle收购了BEA,得到了JRockit虚拟机。 2010年,Oracle收购了Sun,获得了Java的商标和Ho

    2024年02月16日
    浏览(65)
  • 深入理解Java虚拟机——内存分配与回收策略

    在读这篇博客之前,你需要了解分代收集理论中,收集器应该将Java堆划分出不同的区域**,**然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。 例如 appel式回收 ,HotSpot虚拟机中的新生代收集器都采用了appel式回收来设计新生代内

    2024年02月04日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包