JavaScript tự động cấp phát bộ nhớ khi khai báo biến. Garbage Collection (GC) là quá trình tìm và giải phóng bộ nhớ không còn được sử dụng (unreachable) bởi ứng dụng.
Các thuật toán chính
1. Mark-and-Sweep (Đánh dấu và quét) – Phổ biến nhất
- Mark: Từ các "roots" (global object, call stack, closures), duyệt qua tất cả tham chiếu, đánh dấu object "reachable" (có thể truy cập).
- Sweep: Quét heap, object không được đánh dấu → unreachable → giải phóng bộ nhớ.
- Xử lý tốt vòng tròn tham chiếu (circular references).
2. Reference Counting (Đếm tham chiếu) – Cũ, ít dùng
- Mỗi object đếm số tham chiếu trỏ đến nó. Đếm về 0 → giải phóng ngay.
- Nhược điểm: Không xử lý được circular reference (A→B, B→A).
- IE cũ dùng cho DOM objects → memory leak nổi tiếng.
Đối tượng "Roots" (GC Roots)
- Global object (
windowtrình duyệt,globalNode.js) - Call stack (biến cục bộ, tham số hàm đang chạy)
- Closures (biến bị capture)
- Module cache
Best practice hỗ trợ GC
- Hủy tham chiếu không cần:
obj = null,arr.length = 0. - Tránh global variable không cần thiết.
- Dùng
WeakMap,WeakSet,WeakRefcho cache, metadata không nên ngăn GC. - Event listener: nhớ
removeEventListenerkhi không dùng.