Característica de mapa débil
-
WeakMap solo puede usar objetos como nombres clave (excepto nulo)
-
Los objetos a los que se hace referencia mediante nombres clave son referencias débiles
-
WeakMap no es transitable
Fuerte referencia:
let a = {
name: "eric", age: 20}
let arr = [a, "other"]
当不需要时,需要手动切断引用,GC才能回收。
a = null;
arr[0] = null;
同理Map也是如此
Cita débil:
弱引用不参与垃圾回收的机制,也就是说GC在回收时不考虑弱引用的影响
当一个对象被回收后,相关的弱引用也会自动消失
比如
let a = {
name: "eric", age: 20}
let wp = new WeakMap();
wp.set(a, new Array(10 * 1024 * 1024));
此时如果 a = null;
wp里的键名对象和所对应的键值对会自动消失,不用手动删除引用
Casos de uso para probar el proceso de recuperación de GC
1. Mapa
<button>null</button>
const buttonNode = document.querySelector("button");
let key = {
name: "Eric",
age: 20
}
let map = new Map();
map.set(key, new Array(10 * 1024 * 1024));
buttonNode.addEventListener("click", () => {
key = null;
})
- Abra
chrome
la consola, busqueperformance monitor
el panel y podrá ver losjs heap size
aprox. iniciales.45M
- Haga clic
button
en el botón parakey
configurarlonull
, luego haga clic enchrome
el íconoMemony
del panel de la consolaGC
(la papelera a la izquierda) y vuelva a verificarjs heap size
si45M
(sin cambios)
2.Mapa débil
<button>null</button>
const buttonNode = document.querySelector("button");
let key = {
name: "Eric",
age: 20
}
let wp = new WeakMap();
wp.set(key, new Array(10 * 1024 * 1024));
buttonNode.addEventListener("click", () => {
key = null;
})
- Abra
chrome
la consola, busqueperformance monitor
el panel y podrá ver losjs heap size
aprox. iniciales.45M
- Haga clic
button
en el botón parakey
establecerlo ennull
, luego haga clic enchrome
el íconoMemony
del panel de la consolaGC
(la papelera a la izquierda) y vuelva a verificarjs heap size
(3M
obviamente más pequeño)- Significa que GC ha reclamado la memoria a la que se hace referencia en wp.
- En resumen, se demuestra el débil mecanismo de referencia de WeakMap.