我想要一个Flyweight对象,所以我创建了一个Object并将它的实例存储在这样的Map中:
const FlyweightNumber = (function(){
"use strict";
const instances = new Map();
class FlyweightNumber{
constructor(number){
Object.defineProperty(this, 'number', {
value: number
});
if(!instances.get(number)){
instances.set(number, this);
}
else {
return instances.get(number);
}
}
toString() {
return this.number;
}
valueOf(){
return this.number;
}
toJSON(){
return this.number;
}
}
return FlyweightNumber;
})();
module.exports = FlyweightNumber;
问题在于,当我不再使用FlyweightNumber值时,它仍然在内存中,存储在此Map中。
因为如果不再使用WeakMap和WeakSet应该让垃圾收集器清除它,我怎么能写一个构造函数来返回WeakSet或WeakMap中的对象,或者如果它不再存储就创建一个新对象? / p>
答案 0 :(得分:0)
您正在寻找soft reference来实现您的号码缓存。不幸的是,JS没有这些。
它的nvidia-docker
也没有创建弱引用,它实际上是ephemeron。它不允许您观察是否已收集对象。