c# - C# 垃圾收集器会释放这些对象吗?
问题描述
我正在从节点制作一个树形图(我有一个自定义节点类),并且在某些时候,我想破坏整个树以开始一个新的。节点存储指向其父母和孩子的指针。我还将根节点显式存储在变量中。据我了解,如果我删除对根节点的引用,我将无法再访问任何节点。
所以,我的问题是,如果我删除根节点引用,垃圾收集器会删除所有节点吗?它们确实有彼此的指针,但在这种情况下,我看不到任何可以访问它们的方式。
解决方案
所以,我的问题是,如果我删除根节点引用,垃圾收集器会删除所有节点吗?它们确实有彼此的指针,但在这种情况下,我看不到任何可以访问它们的方式。
最终:是的。
GC 可以在没有“对应用程序根的完整强引用链”的情况下收集所有内容。如果您删除了所有强引用,则它们不应再具有该链。
问题不再是是否会被收集,而是何时。问题是,GC 运行成本很高,因此运行时会尝试尽可能少地运行它。如果它只在应用程序关闭期间运行一次,那是理想的情况。所以不要因为增加内存使用而感到困惑。
推荐阅读
- elasticsearch - 是否可以在 .conf 文件中拆分路径路径?
- linux - 如何使用 nfs4_setfacl 使文件的默认权限为 664,目录为 775?
- puppeteer - 如何获取 puppeteer-cluster 浏览器的 WSendpoint
- c++ - 如何将 nlohmann json 转换为 uint8_t 数组?
- javascript - D3折线图组件未在React中的useEffect内更新
- c# - 无法在 SQL 数据工具脚本中应用相等性“运算符 '==' 不能应用于 'bool' 类型的操作数”(FIX)
- npgsql - npgsql 连接的客户端统计信息
- ibm-cloud - IBM 从 Watson Assistant 生成不记名令牌
- javascript - 直播音频会议(Nodejs)
- sql - SQL 中的条件问题