sách gpt4 ăn đã đi

Nói về cơ chế thu gom rác trong JavaScript

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 36 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này nói về cơ chế thu gom rác trong JavaScript, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.

   JavaScript có tính năng thu gom rác tự động, nghĩa là môi trường thực thi chịu trách nhiệm quản lý bộ nhớ được sử dụng trong quá trình thực thi mã.

  Khi viết chương trình JavaScript, nhà phát triển không còn phải lo lắng về việc sử dụng bộ nhớ. Việc phân bổ bộ nhớ cần thiết và tái chế bộ nhớ không cần thiết đều được quản lý hoàn toàn tự động.

  Nguyên lý của cơ chế thu gom rác này thực ra rất đơn giản: tìm những biến không còn được sử dụng nữa, sau đó giải phóng bộ nhớ mà chúng chiếm giữ. Để thực hiện việc này, trình thu gom rác thực hiện thao tác này định kỳ theo các khoảng thời gian cố định (hoặc thời gian thu thập theo lịch trình trong quá trình thực thi mã).

  Cụ thể đối với việc triển khai trong trình duyệt, thường có hai chiến lược, đó là xóa dấu và đếm tham chiếu.

1. Đánh dấu thanh toán bù trừ.

  Phương pháp thu gom rác được sử dụng phổ biến nhất trong JavaScript là đánh dấu và quét. Khi một biến đi vào môi trường (ví dụ: khi một biến được khai báo trong hàm), biến đó được đánh dấu là "đã vào môi trường". Và khi một biến rời khỏi môi trường, nó được đánh dấu là "rời khỏi môi trường".

  Khi trình thu gom rác chạy, nó sẽ đánh dấu tất cả các biến được lưu trong bộ nhớ. Bất kỳ phương pháp đánh dấu nào cũng có thể được sử dụng, ví dụ: bạn có thể lật một bit đặc biệt để ghi lại khi một biến đi vào môi trường hoặc sử dụng danh sách các biến "vào môi trường" và danh sách các biến "rời khỏi môi trường" để theo dõi các biến nào xảy ra sự thay đổi.

  Sau đó, nó xóa thẻ của các biến trong môi trường và các biến được tham chiếu bởi các biến trong môi trường. Các biến được đánh dấu sau đó sẽ được coi là biến bị xóa vì các biến trong môi trường không còn có thể truy cập vào các biến này.

  Cuối cùng, trình thu gom rác hoàn thành công việc dọn dẹp bộ nhớ, hủy các giá trị được đánh dấu đó và lấy lại không gian bộ nhớ mà chúng chiếm giữ.

2. Tính tham chiếu.

  Một chiến lược thu gom rác ít phổ biến hơn được gọi là đếm tham chiếu. Ý nghĩa của việc đếm tham chiếu là theo dõi số lần mỗi giá trị được tham chiếu.

  Khi một biến được khai báo và một giá trị kiểu tham chiếu được gán cho biến đó thì số lượng tham chiếu đến giá trị này là 1. Nếu cùng một giá trị được gán cho một biến khác, số tham chiếu của giá trị đó sẽ tăng thêm 1. Ngược lại, nếu biến chứa tham chiếu đến giá trị này nhận được giá trị khác thì số lượng tham chiếu đến giá trị này sẽ giảm đi 1.

  Khi số lượng tham chiếu đến giá trị này trở thành 0, điều đó có nghĩa là không còn cách nào để truy cập giá trị này nữa, do đó không gian bộ nhớ mà nó chiếm giữ có thể được lấy lại.

  Bằng cách này, lần tiếp theo khi trình thu gom rác chạy, nó sẽ giải phóng bộ nhớ bị chiếm giữ bởi các giá trị không có tham chiếu.

  Các vấn đề hiện tại: Chừng nào các đối tượng COM (Mô hình đối tượng thành phần, Mô hình đối tượng thành phần) có liên quan đến IE, sẽ có các vấn đề tham chiếu vòng tròn. Như được hiển thị trong đoạn mã sau:

?
1
2
3
4
của chúng tôi phần tử = document.getElementById( "một số_phần_tử" );
của chúng tôi Đối tượng của tôi = mới Sự vật();
myObject.element = phần tử;
phần tử.someObject = myObject;

  Ví dụ này tạo tham chiếu vòng giữa phần tử DOM (phần tử) và đối tượng JavaScript gốc (myObject).

  Trong số đó, biến myObject có thuộc tính tên là element trỏ đến đối tượng phần tử.

  Phần tử biến cũng có một thuộc tính có tên someObject tham chiếu ngược lại myObject.

  Do tham chiếu vòng tròn này, ngay cả khi DOM trong ví dụ bị xóa khỏi trang, nó sẽ không bao giờ được tái chế.

  Giải pháp thay thế: Tốt nhất bạn nên ngắt kết nối thủ công các đối tượng JavaScript gốc khỏi các phần tử DOM khi bạn không sử dụng chúng.

?
1
2
myObject.element = vô giá trị ;
phần tử.someObject = vô giá trị ;

  Đặt một biến thành null có nghĩa là cắt đứt kết nối giữa biến và giá trị mà nó đã tham chiếu trước đó. Lần tiếp theo khi trình thu gom rác chạy, các giá trị này sẽ bị xóa và bộ nhớ mà chúng chiếm giữ sẽ được thu hồi.

3. Quản lý bộ nhớ.

  Việc đảm bảo sử dụng lượng bộ nhớ tối thiểu sẽ cho phép trang đạt được hiệu suất tốt hơn. Cách tốt nhất để tối ưu hóa việc sử dụng bộ nhớ là chỉ lưu dữ liệu cần thiết cho mã thực thi.

  Khi dữ liệu không còn hữu ích nữa, cách tốt nhất là giải phóng tham chiếu của nó bằng cách đặt giá trị của nó thành null - điều này được gọi là hủy tham chiếu.

  Cách tiếp cận này áp dụng cho hầu hết các biến toàn cục và thuộc tính của các đối tượng toàn cục. Các biến cục bộ sẽ tự động bị hủy đăng ký khi chúng rời khỏi môi trường thực thi, như trong ví dụ sau

?
1
2
3
4
5
6
chức năng createPerson(tên){
  của chúng tôi Người dùng cục bộ = mới Sự vật();
  localPerson.name = tên;
  }
của chúng tôi globalPerson = tạoPerson( "Nicolas" );
globalPerson = vô giá trị ; // Hủy đăng ký thủ công toàn cầuPerson

   Biến GlobalPerson nhận giá trị được trả về bởi hàm createPerson(). Bên trong hàm createPerson(), chúng ta tạo một đối tượng và gán nó cho biến cục bộ localPerson, sau đó thêm một thuộc tính có tên name vào đối tượng. Cuối cùng, khi hàm này được gọi, localPerson được trả về dưới dạng giá trị hàm và được gán cho biến toàn cục GlobalPerson.

  Vì localPerson rời khỏi môi trường thực thi của nó sau khi hàm createPerson() được thực thi nên chúng ta không cần phải hủy đăng ký nó một cách rõ ràng.

  Nhưng đối với biến toàn cục GlobalPerson, chúng ta cần hủy đăng ký nó theo cách thủ công khi không sử dụng. Đây là mục đích của dòng mã cuối cùng trong ví dụ trên.

Trên đây là nội dung chi tiết về cơ chế thu gom rác trong JavaScript. Để biết thêm thông tin về thu gom rác trong JavaScript, vui lòng theo dõi các bài viết liên quan khác của tôi! .

Liên kết gốc: https://www.cnblogs.com/gg-qq/archive/2004/01/13/10811924.html.

Cuối cùng, bài viết nói về cơ chế thu gom rác trong JavaScript kết thúc tại đây. Nếu bạn muốn biết thêm về việc nói về cơ chế thu gom rác trong JavaScript, vui lòng tìm kiếm các bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan. blog trong tương lai! .

36 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress