![]() |
1
4
绝对没问题。GC从一组根(局部变量和静态变量等)开始工作,并查找它所能找到的所有引用。如果没有其他对象引用此相互引用的对象,则该对象将符合收集条件。 |
![]() |
2
1
GC足够聪明。如果两个对象在时间和空间维度上分配得足够近,它甚至会同时收集这两个对象;) |
![]() |
3
1
基本答案:这不是问题。 我以前听过这种问题,它源于对引用计数的混淆,循环引用确实会带来问题。 NET收集器不计算引用,它只是扫描并标记引用的对象。这些标志还阻止它进入循环。这是一个非常简单且几乎万无一失的机制。系统不需要对入站引用进行计数或跟踪,因此短期引用的开销为零。但是您必须注意引用存在的位置,一个常见的问题是订阅事件的对象。该事件保留一个引用,因此您需要先取消订阅,然后才能回收订阅对象。GC的另一个好处是,逻辑的工作方式也是相反的:只要代码能够访问引用,就可以保证引用是有效的,因为引用存在。 引用计数要求编译器在每次引用被更改、复制或超出范围时注入代码,从而产生恒定的开销。当计数降至零时,该对象可以立即销毁。系统需要(手动)处理循环的机制。您可以通过搜索COM IUnknown界面来查找一些恐怖故事。 |
![]() |
Schadre · C-plus编码错误 2 年前 |
![]() |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 3 年前 |
![]() |
A_K · 使用cat或打印方法打印部分内容的子集闭包 3 年前 |
![]() |
Mo Fatah · 如何使用Python类打印数独板? 3 年前 |