JavaScript class 字段引用和垃圾收集
JavaScript class field references and garbage collection
我实现了一个 class,可用于实例化传递给访问者函数的对象,该访问者函数检测 JSON 文档中的重复键。我要解决的问题是检测 JSON 文档中的重复键。更具体地说,我想检测同一嵌套级别的重复项,从现在开始我将其称为上下文。
我实现的class有2个字段:
stack
:一个数组,存储所有按上下文分组的访问键(数组中的每一项都包含给定上下文的键)
visited
:保存当前上下文(堆栈顶部)的已访问键
我的问题如下:
当我将它们从堆栈中弹出时,是否需要从它们可能持有的键的引用中清除 Set
?换句话说,discarded?.clear()
调用是否必要,因为集合包含对已访问键的字符串引用?
我知道集合引用本身会丢失,但我想知道集合持有的引用(对 json 文档中访问的键)
class DetectDuplicates {
stack;
visited;
constructor() {
this.stack = [];
this.visited = new Set();
}
onObjectBegin() {
this.stack.push(new Set());
this.visitedKeys = this.stack[this.stack.length - 1];
}
onObjectEnd() {
const discarded = this.stack.pop();
// Is that necessary?
discarded?.clear();
this.visitedKeys = this.stack[this.stack.length - 1];
}
}
Do I need to clear the Set
from the references they might holds to the keys when I pop them out of the stack?
没有。如果 Set
实例未从其他任何地方引用,它将被垃圾收集,并将带走存储在其中的所有引用。
我实现了一个 class,可用于实例化传递给访问者函数的对象,该访问者函数检测 JSON 文档中的重复键。我要解决的问题是检测 JSON 文档中的重复键。更具体地说,我想检测同一嵌套级别的重复项,从现在开始我将其称为上下文。
我实现的class有2个字段:
stack
:一个数组,存储所有按上下文分组的访问键(数组中的每一项都包含给定上下文的键)visited
:保存当前上下文(堆栈顶部)的已访问键
我的问题如下:
当我将它们从堆栈中弹出时,是否需要从它们可能持有的键的引用中清除 Set
?换句话说,discarded?.clear()
调用是否必要,因为集合包含对已访问键的字符串引用?
我知道集合引用本身会丢失,但我想知道集合持有的引用(对 json 文档中访问的键)
class DetectDuplicates {
stack;
visited;
constructor() {
this.stack = [];
this.visited = new Set();
}
onObjectBegin() {
this.stack.push(new Set());
this.visitedKeys = this.stack[this.stack.length - 1];
}
onObjectEnd() {
const discarded = this.stack.pop();
// Is that necessary?
discarded?.clear();
this.visitedKeys = this.stack[this.stack.length - 1];
}
}
Do I need to clear the
Set
from the references they might holds to the keys when I pop them out of the stack?
没有。如果 Set
实例未从其他任何地方引用,它将被垃圾收集,并将带走存储在其中的所有引用。