自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿布的猫窝

多挣点钱,买猫粮,买小鱼干

  • 博客(11)
  • 收藏
  • 关注

原创 (阅读笔记)垃圾回收的算法与实现 - 增量式GC

增量式 GC 是将 GC 和 mutator 一点一点交替运行的手法,而不是像停止型GC,需要等到 GC 执行完成。 停止型 GC 的最大暂停时间太长。三色标记算法增量式 GC 即 gc 与 mutator 间歇执行,那么 gc 就需要维护住『状态』让下一次运行时可以正常执行,为了达到这个效果,引入了下面几个结构对象的 mark 标记gc 阶段一个 markStack,用来存储扫描中...

2019-10-09 17:01:22 525

原创 (阅读笔记)垃圾回收的算法与实现 - 分代垃圾回收

(阅读笔记)垃圾回收的算法与实现 - 分代垃圾回收分代垃圾回收是即将对象进行分类,然后针对不同类使用不同的算法策略。分类是按照对象存活时间进行,新创建的对象会被称为新生代,而经历过一定 GC次数以后还或者的对象,则是老年代,针对新生代对象的GC被称为 minorGC 或者 Java 中的 youngGC,针对老年代对象的 GC 被称为majorGC 或者 Java 中的 FullGC有一个基本...

2019-10-09 01:42:01 220

原创 (阅读笔记)垃圾回收的算法与实现 - 复制算法

文章目录基础实现代码优点缺点Cheney 的 GC 复制算法代码优点缺点近似深度优先搜索方法状态执行过程多空间复制算法整体思路是,将堆分为二等份,当其中一份分配不够时,启动 GC 递归从根节点出发(深度优先),将对象拷贝到另外一半,然后将原先部分全部回收。循环往复。考虑到对象被引用的复杂性,只有当一个对象被 完全拷贝 完成以后,才会更新指向其的地址。基础实现代码type object s...

2019-08-21 01:02:17 294

原创 (阅读笔记)垃圾回收的算法与实现 - Reference Counting

文章目录基础实现代码优点缺点计数器操作繁重计数器占位多实现繁琐复杂循环引用无法回收算法改进延迟引用计数法ZCT优点缺点Sticky 引用计数法啥都不做使用 MarkSweep1 位引用计数法(标签法)优点缺点部分 MarkSweep 算法( 4 色算法)缺点MarkSweep 的逻辑是判断对象是否存在引用,而 引用计数法 则在这个逻辑上更进了一步,引入计数器的概念来统计对象当前的被引用次数。如果...

2019-07-26 01:54:25 266

原创 (阅读笔记)垃圾回收的算法与实现 - Mark Sweep

文章目录基础实现代码优点缺点内存的分配碎片化分配速度慢与写时复制技术不兼容算法改进CompactMultiple Free-ListBiBOPBitmap MarkingLazySweepMarkSweep 即 标记 - 清除算法MarkSweep 从名字就能知道,此算法包含两个阶段标记阶段,负责将所有活动对象打上标记清除阶段,负责将没有被标记的对象回收标记阶段从 root 进行出发...

2019-07-21 20:00:15 272

原创 (阅读笔记)垃圾回收的算法与实现 - 整体

(阅读笔记)垃圾回收的算法与实现 - 整体GC 是什么GC 是 Garbage Collection 的缩写,目的是可以寻找到内存中的垃圾,并将其进行回收,从而能让被再次分配使用。至于垃圾则是指已经不被任何程序所是有的内存空间。也就是说,GC 的目的有以下两条定位垃圾回收垃圾GC 的一些基本概念对象对象是 GC 操作的基本单位,可以理解成分配的一块内存,对象包含两部分。Hea...

2019-07-21 03:13:15 154

原创 golang tag

golang tagtag 是针对 struct field 的补充说明tag 可以是 kv 形式,也可以字符串形式(比如设置标记属性)如果只是字符串形式,就不要使用 tag.Lookup 方法了,这个是针对 kv 的。 那个 bool 的返回值是用来标识 value 是否存在,而非 key 是否存在golang 对 tag 的处理是通过字符读取,然后通过分割字符来进行分组,以及区分 ...

2019-07-03 17:30:24 210

原创 context 包学习笔记

Context 是用来控制一个请求的生命周期,以及周期内数据共享的一个 package。数据层面依赖 valueCtx,是一个嵌套实现的类 map 的数据结构type valueCtx struct { Context key, val interface{}}通过 递归匹配,来读取最近的一次更新的值(考虑到一个请求周期内的数据应该不多,递归查询应该是可以...

2018-05-08 11:34:35 298

原创 使用空 struct 做为 channel 中的通知载体

背景使用 Golang 开发的时候,会经常使用 channel 来进行信号通知,即所传递的数据本身没有什么实际价值。实现方式之前一直使用如下方式ch := make(chan int)后来看到另外一种方式ch := make(chan struct{})两种方式的对比使用空 struct 是对内存更友好的开发方式,在 go 源代码中针对 空struc...

2018-05-08 11:32:04 1989 1

原创 golang 的 map 实现(二)

如何扩容map 增长过程中,对空间的需求也在增加,那么如何完成透明扩容的同时,又不会太多影响性能,就是这里要讨论的。仅考虑空间增长,map 的扩容方式有两种,overflow 以及 hashGrowoverflow 是溢出链,是 bucket 级别的扩容,理解成链表hashGrow 则是再散列的实现。空间变大的同时,重新进行散列,不过 rehash 过程不是同步,而是被摊还到了 m...

2018-03-16 14:35:00 824

原创 golang 的 map 实现(一)

概述哈希表是工程中常用到的数据类型,能提供快速的检索和更新。复杂度一般为 O(1)本篇博文分 两部分写,第一部分是源码学习,第二部分是一些内部实现,以及觉着有意思的一些地方,以及个人思考理论哈希表需要解决的问题有两个位置索引数据碰撞索引交给 hash function 哈希算法,常用就是模运算解决碰撞主要有以下三种方式分离链接,也就是利用链表性质存储冲突...

2018-03-16 14:33:58 1591 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除