Tài liệu thu gom rác Python [đã đóng]


132

Tôi đang tìm tài liệu mô tả chi tiết cách thức hoạt động của bộ sưu tập rác python.

Tôi quan tâm những gì được thực hiện trong bước nào. Những đối tượng nào trong 3 bộ sưu tập này? Những loại đối tượng được xóa trong mỗi bước? Thuật toán nào được sử dụng để tìm chu kỳ tham khảo?

Bối cảnh: Tôi đang thực hiện một số tìm kiếm phải hoàn thành trong một khoảng thời gian nhỏ. Khi trình thu gom rác bắt đầu thu thập thế hệ cũ nhất, nó sẽ "chậm" hơn nhiều so với các trường hợp khác. Phải mất nhiều thời gian hơn dự định cho các tìm kiếm. Tôi đang tìm cách dự đoán khi nào nó sẽ thu thập thế hệ cũ nhất và sẽ mất bao lâu.

Thật dễ dàng để dự đoán khi nào nó sẽ thu thập thế hệ cũ nhất với get_count()get_threshold(). Điều đó cũng có thể được thao tác với set_threshold(). Nhưng tôi không thấy cách dễ dàng để quyết định là tốt hơn để thực hiện collect()bằng vũ lực hoặc chờ bộ sưu tập theo lịch trình.

Câu trả lời:


126

Không có tài nguyên rõ ràng về cách Python thực hiện bộ sưu tập rác của nó (trừ chính mã nguồn), nhưng 3 liên kết này sẽ cho bạn một ý tưởng khá hay.

Cập nhật

Nguồn thực sự khá hữu ích. Bạn nhận được bao nhiêu từ nó phụ thuộc vào mức độ bạn đọc C, nhưng các ý kiến ​​thực sự rất hữu ích. Bỏ qua collect()chức năng và các ý kiến ​​giải thích quá trình tốt (mặc dù về mặt rất kỹ thuật).


3
CPython không còn sử dụng Subversion. Họ đã chuyển sang Mercurial được lưu trữ tại hg.python.org. Vì tôi không thể tìm ra cách liên kết đến phiên bản hiện tại của tệp trên trang web đó, nên tôi sẽ liên kết với máy nhân bản GitHub không chính thức .
Marius Gedminas

1
Đừng bận tâm điều đó, tìm ra cách liên kết đến gcmodule.c mới nhất trên trang web chính thức. Tôi vẫn thấy GitHub dễ đọc hơn.
Marius Gedminas

học được rất nhiều. Thx
gus

1
Liên kết đầu tiên không trỏ đến bất cứ điều gì liên quan đến bộ sưu tập rác Python. Vui lòng cập nhật liên kết.
Manish Barnwal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.