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.
go——垃圾回收机制(GC)相关推荐
- 垃圾回收机制GC知识再总结兼谈如何用好GC(转)
作者:Jeff Wong 出处:http://jeffwongishandsome.cnblogs.com/ 本文版权归作者和博客园共有,欢迎围观转载.转载时请您务必在文章明显位置给出原文链接,谢 ...
- JAVA垃圾回收机制GC之我姐是明星
JAVA垃圾回收机制GC(Garbage Collection) 工作面试老伙伴之java垃圾回收机制 什么是GC,为什么要GC(我的明星老姐) 判断垃圾(找到不常穿的衣服) A 引用计数算法 B 可 ...
- Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector
文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...
- C#垃圾回收机制(GC)
GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- JVM垃圾回收机制GC详解
作为 Java 语言最重要的特性之一的自动垃圾回收机制,也是基于 JVM 实现的.那么,自动垃圾回收机制到底是如何实现的呢? 1.GC是干啥的? 进行资源的回收 1.1.对于 C/C++ 而言 对于C ...
- C#垃圾回收机制GC
本章主要讲解以下C#的垃圾回收机制,之前也有文章提到: Effect C# 学习笔记 .Net资源管理_dmk17771552304的博客-CSDN博客 为什么要使用GC 提高了软件开发的抽象度 程序 ...
- 【JVM】JVM垃圾回收机制GC
文章目录 JVM垃圾回收机制 一.堆内存区域划分 1.1内存分配策略 1.2永久代(Permanent Generation) 1.3元空间(MetaSpace) 二.标记算法 2.1引用计数算法 2 ...
- java对于垃圾回收机制[GC垃圾回收机制] 为什么有GC还会有内存溢出呢?
java垃圾回收机制 来源于书本和工作中的总结. 内存泄露 如果分配出去的内存得不到释放,及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这就是内存泄露 GC机制 java内存分配和回收 都是j ...
- gc java root_C#技术漫谈之垃圾回收机制(GC)
GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...
- C#技术漫谈之垃圾回收机制(GC)
虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现. ...
最新文章
- 干货讲解 | OKT507-C开发板基于Linux系统的应用笔记
- UITableView中发现的小技巧(不断更新)
- Web.xml配置详解之context-param
- qt mysql 清空表格_qt删除数据库中的表
- Java,如果这是一个更好的世界
- jQuery中的函数汇总1
- 汉诺塔计算移动次数和消耗体力
- flex皮肤制作---通过flash
- Android自动清理无用资源工具
- 使用JAVA工程和KEmulator模拟器开发J2ME项目
- 一个留美女博士的七年
- h5离线缓存+sessionstroage做 离线网页
- 大型门户网站的商业计划书(包括技术解决方案)
- 文学家是什么时候出现的
- C语言求1到1000素数之和,C语言实现1-1000中所有素数的和
- 圣诞节马上到了。H5+CSS3+JS制作圣诞帽头像源码送给你们。。。
- uni-app 对照设计稿还原不同屏幕像素适配(iPhone X)
- 无线连接打印服务器,如何用旧电脑架设无线网络打印服务器
- 仿微信朋友圈图片预览自定义View
- 如何在Excel表格中给某一列添加固定筛选项