Learn
← Previous Next →

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