Hari 17: WeakMap, WeakSet & Memory Management
50 min
Last updated 09 Apr 2026
WeakMap — Map yang Tidak Mencegah GC
// Map biasa — mencegah garbage collection
const map = new Map();
let user = { nama: "Budi" };
map.set(user, "data user");
user = null; // map masih menyimpan referensi! GC tidak bisa hapus
// WeakMap — referensi lemah (weak reference)
const cache = new WeakMap();
let objek = { data: "penting" };
cache.set(objek, "cached result");
objek = null; // WeakMap tidak cegah GC → memori bebas secara otomatis
// cache.get(objek) → undefined setelah GC
Use Case: Private Data dengan WeakMap
const _privateData = new WeakMap();
class BankAccount {
constructor(pemilik, saldo) {
_privateData.set(this, { pemilik, saldo });
}
setor(jumlah) {
const data = _privateData.get(this);
data.saldo += jumlah;
}
cekSaldo() {
return _privateData.get(this).saldo;
}
info() {
const { pemilik, saldo } = _privateData.get(this);
return `${pemilik}: Rp ${saldo.toLocaleString()}`;
}
}
const rek = new BankAccount("Budi", 1000000);
rek.setor(500000);
console.log(rek.info()); // Budi: Rp 1.500.000
// Data saldo tidak bisa diakses dari luar!
💡
Notice: WeakMap hanya menerima objek sebagai key. Referensi "lemah" artinya tidak mencegah garbage collection jika key-nya sudah tidak dipakai.
Assignment
Implementasi cache sederhana dengan WeakMap untuk menyimpan hasil komputasi per objek. Buat fungsi hitungHash(obj) yang cache hasilnya.
Expected output:
1082
1082 (cached)
1086
JS
script.js
Solution
Output