Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Garbage Collection (GC) trong JavaScript

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

  1. Reference-counting (cũ): Đếm số reference. 0 reference → collect. Vấn đề: Circular reference không bao giờ về 0.
  2. 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.

Tham khảo: MDN Memory Management