销毁typescript中的循环引用实例?
假设我有如下代码:销毁typescript中的循环引用实例?,typescript,memory-leaks,circular-reference,Typescript,Memory Leaks,Circular Reference,假设我有如下代码: class A { b: B; constructor() { this.b = new B(this); } } class B { a: A; constructor(a: A) { this.a = a; } } let a= new A() 当我要销毁某个实例时: 1我应该 a=null; 或 ? 2有没有办法编写代码来测试结果?说一些代码来检测内存中某个类的实例号?如果没有对a或
class A {
b: B;
constructor() {
this.b = new B(this);
}
}
class B {
a: A;
constructor(a: A) {
this.a = a;
}
}
let a= new A()
当我要销毁某个实例时:
1我应该
a=null;
或
?
2有没有办法编写代码来测试结果?说一些代码来检测内存中某个类的实例号?如果没有对a或b的引用,它将被垃圾收集器标记为不可访问,并一起清理,您不必手动执行任何操作
您可以在javascript中找到关于垃圾收集器工作原理的更多信息。如果没有对a或b的引用,垃圾收集器会将其标记为无法访问并一起清理,您不必做任何事情。@toskv因此,如果只有对a的引用,当我使用
a=null
时。即使a和b是循环引用的,b也会自动被gc引用?是的,只要其他人没有对它们的引用。您可以在MDN页面上了解有关javascript垃圾收集的更多信息。请记住,实际实现可能会有所不同。在上面的示例中,DOM元素“myDivElement”在“circularReference”属性中有一个对自身的循环引用。如果属性未显式删除或为空,则引用计数垃圾收集器将始终至少保留一个完整的引用,并将DOM元素保留在内存中,即使它已从DOM树中删除。如果DOM元素包含大量数据(如上面的示例所示,带有“lotsOfData”属性),则该数据所消耗的内存将永远不会被释放。这是您发送的链接中的一句话,您确定它能像您所说的那样工作吗?我认为文件中的解释是vague@Esqarrouth没有JS引擎使用引用计数。即使是IE6和IE7(它们已经死了很久了!)也只有在DOM对象参与循环时才会出现问题。
a.b.a=null;
a=null;