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

Bạn có nghĩ rằng bộ thu gom rác có thể theo dõi tất cả các đối tượng Python không?

Python sử dụng hai kỹ thuật để dọn rác. Một là đếm tham chiếu, ảnh hưởng đến tất cả các đối tượng nhưng không thể xóa các đối tượng trực tiếp hoặc gián tiếp tham chiếu đến nhau. Đó là nơi mà trình thu gom rác thực sự xuất hiện:python có mô-đun gc, mô-đun này tìm kiếm các tham chiếu theo chu kỳ trong các đối tượng mà nó biết. Chỉ các đối tượng có khả năng là một phần của chu trình tham chiếu mới tham gia vào gc tuần hoàn. Vì vậy, ví dụ, danh sách thì có, nhưng chuỗi thì không; chuỗi không tham chiếu đến bất kỳ đối tượng nào khác.

Tất cả các lớp Python và các phiên bản của chúng tự động được theo dõi bởi gc tuần hoàn. Các loại được định nghĩa trong C thì không, trừ khi chúng cố gắng một chút. Tất cả các loại nội trang có thể là một phần của chu trình đều làm được. Nhưng điều này có nghĩa là mô-đun gc chỉ biết về các loại phát cùng lúc.

Ngoài cơ chế thu thập, thực tế là Python cũng có trình cấp phát bộ nhớ tổng hợp (obmalloc) của riêng nó, phân bổ toàn bộ vùng bộ nhớ và sử dụng bộ nhớ cho hầu hết các đối tượng nhỏ hơn mà nó tạo ra. Python hiện giải phóng các khu vực này khi chúng hoàn toàn trống (trong một thời gian dài thì không), nhưng thực sự làm trống một khu vực là khá hiếm:vì các đối tượng Python không thể di chuyển được, bạn không thể chỉ di chuyển một số bộ phân tầng sang chỗ khác khu vực.