垃圾收集器:对象图的数据结构
Garbage collector : data structure of the object graph
我读了很多关于垃圾收集的资料,他们解释了不同的算法。然而,我没有找到任何解释图形对象的表示。
我的想法很简单:一个有方向的图,其中顶点代表分配的内存块(在堆上)和边缘的所有者关系。示例:考虑2个内存块m1和m2,如果m1包含对m2内部块的引用,则添加一条边(m1, m2)。这些边被m1包含的对m2的引用数加权(这里只有1)。最后,我得到了一个代表堆栈的"虚拟"内存顶点,称之为M0。每个从M0可访问的Mi都不能被垃圾收集。
好了,现在考虑你想给图添加一个内存块。如果我们将顶点保持在一个集合内,那么添加内存块的复杂度应该是O(log(n))。第一个问题:我们能做得更好吗?
删除标识符
现在,我被要求将这个算法与c++中的引用计数机制(shared_ptr)一起使用。首先,参考计数器是否与顶点的in度无关?
其次,关键思想是使用最好的引用计数器(O(1)删除/添加)和最好的垃圾收集器算法(清理引用周期),但是在对象图中添加/删除每个节点的开销不是有点低效吗?
添加/删除已知垃圾收集器(java/c#/…)的复杂性是什么?
谢谢!
嗯…你的前提错了。已知的垃圾收集器实际上并不维护太多的状态,每个对象最多维护几个位和一些结构,但仅此而已。相反,它们在每次收集传递时建立一些状态,并让它在传递结束时消失。这样,他们几乎不需要(甚至不需要)所有权关系的工具。
相关文章:
- 当接收到不明确的规范时,表示图的邻接列表的数据结构
- 在现有数据结构上使用BGL算法需要什么(边和顶点作为矢量<对象*>)?
- 如何使用模板在数据结构中链接节点对象
- 如何在 C++ 中创建抽象类的对象或数据结构?
- 使用什么数据结构来存储基于游戏对象的二维单元地图?
- C Koala图库 - 了解访问数据结构的语法
- 哪种数据结构是在一个向量中搜索和计数对象对的最佳数据结构
- C 图数据结构
- 使用C 中的单元格 /图块 /网格进行碰撞检测的最佳数据结构
- Qt 5.2模型视图模式:如何通知模型对象底层数据结构的变化
- 具有恒定时间复杂度的无向图边的数据结构
- 如何在两个或多个数据结构中存储应相同的对象
- 在C++中存储对象地址的数据结构
- c++数据结构,它根据成员的值自动对对象进行排序
- 需要推荐c++游戏服务器,关于玩家使用的数据结构,怪物对象,以获得性能优势
- c或c++中是否有头文件来实现图、树等数据结构
- 存储具有名称的对象的数据结构
- std::vector或其他数据结构中不同类型的对象
- 垃圾收集器:对象图的数据结构
- c++数据结构对象的生命周期是多少?