垃圾自动回收的一个方案
1.vb6的计数方案。简单高效,但是有bug。当对象成员引用自身,计数为2,当程序实际上不再使用这个对象,这个对象计数为1,因此无法自动释放。
2..net的方案。我自己猜测是这样:运行环境遍历当前的堆栈(也就是函数运行的环境,如果不在这个上下文中,这个对象实际上就不被直接使用,如果也不被间接使用,那么就能确定他应该释放了),然后对堆栈中的对象进行成员检测,成员的成员检测,如此类推,最后把不在里面的对象释放掉。可想而知,这个算法代价非常高昂。如果当前有100万个对象,就要检测100万次。当然,这只是我的猜测,估计.net进行了高度的优化。
vb6的计数方案,无法解决循环引用的问题。因此如果基于计数法的设计思路有两个:
1.避免生成循环
2.能够识别出循环
面向对象的对象关系异常复杂,本质上就是一个网络,想不生成循环是非常困难的。
第二,从乱糟糟的对象网络中,找出循环代价也很高。
我设想的方案思路采取第一种,是这样的:
1. 多叉树结构。
2.单一树不产生循环计数。
3.多个树交叉将可能产生循环计数。
4.树根是栈指针引用。
5.任何时候,自身引用自身的计数都是无意义的。
6.单一树结构下,底层指向高层的引用是无意义的(因为根到改点必然有路径),标记为虚线。同一层级的指向也类似。当只有由上至下的指向,就不可能出现循环引用的情况。
7.虚线在特定的条件下会转换为实线,比如根到改节点的实线断开,虚线自然成为实线,而该节点自动降级成为原虚线的下层节点。
8.
待续
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!