Computer >> Máy Tính >  >> Lập trình >> Javascript

Thu gom rác (GC) trong JavaScript?

thu gom rác (GC) là một hình thức quản lý bộ nhớ tự động. Trình thu gom rác, hay chỉ là trình thu gom, cố gắng lấy lại rác hoặc bộ nhớ bị chiếm bởi các đối tượng không còn được chương trình sử dụng. Vấn đề chung là tự động tìm xem một số bộ nhớ "không cần thiết nữa" là không thể quyết định. Do đó, những người thu gom rác thực hiện một giải pháp hạn chế cho vấn đề chung.

Khái niệm chính mà các thuật toán thu gom rác dựa vào là khái niệm tham chiếu. Trong ngữ cảnh quản lý bộ nhớ, một đối tượng được cho là tham chiếu đến một đối tượng khác nếu đối tượng trước đó có quyền truy cập vào đối tượng sau (ngầm định hoặc rõ ràng).

Ví dụ

let a = []
function addToA() {
   let x = {name: "John"}
   a.push(x)
}
console.log(a[0])

Đầu ra

{name: "John"}

Lưu ý rằng x không còn trong phạm vi nữa nhưng vẫn có thể truy cập được bằng cách sử dụng a. Điều này có nghĩa là nó cần phải ở trong bộ nhớ cho đến khi tham chiếu của nó không còn ở đó nữa. Nếu chúng tôi bật nó ra khỏi mảng, nó sẽ không cần thiết nữa và có thể được thu gom.

Bộ thu gom rác hoạt động bằng cách sử dụng các thuật toán sau -

1. Thu gom rác đếm tham chiếu - Một đối tượng được cho là "rác", hoặc có thể sưu tầm nếu không có tham chiếu nào trỏ đến nó. Điều này được sử dụng trong các trình duyệt cũ hơn. Nhưng điều này gây ra sự cố với các đối tượng tham chiếu vòng tròn vì chúng không thể được thu thập (Luôn luôn có một tham chiếu đến chúng từ đối tượng khác.)

2. Thuật toán đánh dấu và quét - Thuật toán này giảm định nghĩa "một đối tượng không còn cần thiết" thành "một đối tượng không thể truy cập được". Thuật toán này giả định kiến ​​thức của một tập hợp các đối tượng được gọi là gốc. Trong JavaScript, gốc là đối tượng toàn cục. Định kỳ, GC bắt đầu từ các gốc này, tìm tất cả các đối tượng được tham chiếu từ các gốc này, một cách đệ quy. Bắt đầu từ gốc, GC do đó sẽ tìm tất cả các đối tượng có thể truy cập và thu thập tất cả các đối tượng không thể truy cập.

Bạn có thể đọc thêm về GC trong javascript Athttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management