GC là quản lý bộ nhớ tự động: thu hồi bộ nhớ của object không còn dùng đến.
Khái niệm cốt lõi: Reference (Tham chiếu)
Object A tham chiếu object B nếu A truy cập được B (trực tiếp/gián tiếp).
Ví dụ
let a = [];
function addToA() {
let x = {name: "John"};
a.push(x); // a tham chiếu x
}
console.log(a[0]); // {name: "John"}
// x ra khỏi scope nhưng vẫn sống nhờ a tham chiếu
// Nếu a.pop() thì x trở thành unreachable → GC thu hồi
Thuật toán GC chính
- Reference-counting (cũ): Đếm số reference. 0 reference → collect. Vấn đề: Circular reference không bao giờ về 0.
- Mark-and-sweep (hiện đại):
- Xác định "roots" (trong JS:
window/global object). - Duyệt đệ quy từ roots, đánh dấu (mark) tất cả object reachable.
- Sweep: thu hồi object unreachable.
→ Xử lý tốt circular reference.
- Xác định "roots" (trong JS:
Tham khảo: MDN Memory Management