K-GC

K-GC , 一个 为 ILBC / D++ 写 的 GC     。

 

一个简单的 GC 模型尝试  。

 

https://github.com/kelin-xycs/K-GC                       

 

 

 

 

 

 

 

 

K-GC 架构下,     中间代码(C 语言代码) 在 引用赋值时,  会记录对象的引用关系,   这样做的目的是为了让 GC 工作时可以随时暂停,  比如  K-GC  工作时,  扫描了 1000 个对象,   还没扫描完,  还有  800 个 对象,   GC 可以停下来,   让应用程序接着运行,    下次 GC 启动接着扫描回收  。   

 

一般的 GC 在 扫描 时 是 不能 暂停 的,  必须 把 扫描全部做完 才能 挂起 GC,  让 应用程序 线程  运行  。        如果 GC 中途 停止扫描,  让 应用程序 线程 运行,  那 这次 扫描白做,  下次  GC  启动  要 从头重新扫描一遍  。

 

K-GC 虽然可以随时暂停扫描,  下次运行接着扫描,   但 也 因为这样,   K-GC 的 性能 不太高  。

 

为什么要做 GC 暂停扫描 这方面的 研究尝试  ?      因为  ILBC / D++ / K-GC  架构 有一个 目标,  就是 要 消除 GC 导致 应用程序 的 暂停(挂起)  。

 

 

在    ILBC / D++ / K-GC   架构 的 研究中,  还提出了 Pool 和 Bag 的 概念,    Bag 是 一个 独立的 内存区域,  在 这个 内存区域 内,  可以 分配空间, 创建对象,  建立 对象图,  Bag 有 自己的 GC,   管理回收 对象图  。

 

Bag 的 GC 可以由 程序员 自己 来写  。

 

一个 Bag  同一时间 只能 有一个 线程 使用,   因此,  对 Bag 的 使用要 加锁  (Lock)  。

 

GC 和 应用线程 之间 也通过 Lock 来 互斥,  使用 Bag  。     GC 要 扫描回收 Bag 时,   先尝试获得 Bag 的 锁,  如果 Bag 正被 应用线程 使用,  则 GC 转入等待(可能是 挂起 或 自旋 或 别的什么,  你们看着办吧),   下次启动时 同样 先尝试获得 Bag 的 锁,   如果 Bag 未被 应用线程 使用,  则 GC 获得 Bag 的 锁,   开始 扫描回收,  GC 占有 Bag 的 锁 的 期间,   应用线程 不能获得 Bag 的 锁,   也就不能使用 Bag  。

 

也可以在 应用线程 内 直接 启动 和 运行 GC,   这样 GC 就不用尝试获得锁,   GC 直接 运行在 应用线程 里  。  

 

有了 Bag,   同学们  就可以 绕过 代码帧  、多核  、多线程挂起  等等  底层 、复杂 、精细 、高深 、“内幕”  的 技术,     不用被 庞大 的 技术资料 和 权威 吓倒,   可以  自由的 自己写  一个  自己的  GC ,  发展  计算机语言  。

 

嘿嘿,   我是不是 把 秘密 都 告诉 你们 了  ?

 

当你们看到  Unity3D 、IL2Cpp  、LLVM  、PostgreSql   玩得那么酷,  再看看   Z GC  那么 复杂 的 设计 和 实现逻辑 和 底层技术 以及 厚厚 的 技术资料 和 背景,    你们 要 怎么 追赶 它们 呢   ?

 

我这里 有 答案  。

 

再看看 GoLang 的 不上不下,  再看看  Rust  “下一代系统编程语言”  的 主流地位 日渐确立,    C++ 也对 Rust 无可奈何,  只有 长辈 的 份,  没有 批评指教 的 份,   你们 要 怎么 追赶 它们 呢   ?

 

我这里 有 答案  。

 

 

 

 

 

 

 

 

GC 和 协程 的 背后代表的,    是 计算机语言 在 当代 要 解决的问题,  包括  内存管理  、多核数据同步  、IO  、线程池  、高并发  、协程优先级评估计算  、多核均衡利用  。

 

分级存储  对  应用程序运行效率 的 影响  和  内存管理 (堆 / 栈) 的 应对策略  。

 

分级存储 是 CPU 一级 Cache  、二级 Cache  、三级 Cache  、内存  、虚拟内存  。

 

这些问题 解决在当代,  谋划在未来,    对 计算机架构 的 未来 影响深远   。

 

百度 的 专家们,     你们能解决这些问题吗  ?       作好准备了吗  ?

 

 

 

 

 

 

再看看    .Net  / C#  的  冲昏头脑  。

 

Java  以前诟病比较多,  现在看起来还行,  (是不是从 java 5 开始版本号变大,  风水就转了) ,   也在进化发展,   就是背的历史包袱有点重,  包括 技术 和 思想观念 的  历史包袱  。     JVM  从新写一个算了  。

 

 

 

 

 

 

 

 

.Net  几年前就在搞移动端  Xamarin ,  现在搞到哪里去了  ?

 

 

 

 

 

 

 

《《 有计算机民科吗?我想给golang写个类似EF的ORM框架》 回复》         https://www.cnblogs.com/KSongKing/p/17483285.html      

 

posted on   凯特琳  阅读(25)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-06-16 看了一下 复变函数 黎曼曲面 流形 复流形 仿射空间 射影空间

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示