Thu gom rác và quản lý bộ nhớ
Quản lý bộ nhớ điều chỉnh cách các chương trình cấp phát và thu hồi bộ nhớ; thu gom rác tự động hóa việc thu hồi bằng cách xác định và giải phóng các đối tượng không còn có thể truy cập được.
Definition
Quản lý bộ nhớ là việc cấp phát và thu hồi bộ nhớ của một chương trình; thu gom rác là việc thu hồi tự động giải phóng bộ nhớ bị chiếm bởi các đối tượng mà chương trình không còn có thể truy cập được, giúp lập trình viên không phải giải phóng bộ nhớ một cách rõ ràng.
Scope
Chủ đề này bao gồm quản lý bộ nhớ tự động và thủ công cho các môi trường thời gian chạy ngôn ngữ: đếm tham chiếu, đánh dấu và quét, sao chép và thu gom thế hệ; theo dõi khả năng truy cập; và sự đánh đổi giữa thông lượng, thời gian tạm dừng và chi phí bộ nhớ. Nó đề cập đến các bộ thu gom đồng thời và tăng dần cũng như mối quan hệ giữa chiến lược thu gom và thiết kế ngôn ngữ.
Core questions
- Làm thế nào một bộ thu gom xác định đối tượng nào vẫn cần thiết?
- Những sự đánh đổi nào tồn tại giữa thông lượng, độ trễ và dung lượng bộ nhớ?
- Tại sao việc phân tách các đối tượng theo tuổi (thu gom thế hệ) lại cải thiện hiệu quả?
- Làm thế nào việc thu gom có thể tránh được những khoảng dừng dài trong các hệ thống tương tác hoặc thời gian thực?
Key theories
- Thu gom rác theo dõi (Tracing garbage collection)
- McCarthy đã giới thiệu việc thu gom rác tự động cho Lisp, thiết lập ý tưởng thu hồi bộ nhớ bằng cách theo dõi các đối tượng nào vẫn có thể truy cập được từ gốc của chương trình.
- Thu gom thế hệ (Generational collection)
- Lieberman và Hewitt đã quan sát thấy rằng hầu hết các đối tượng chết sớm và đề xuất thu gom các thế hệ trẻ thường xuyên hơn, làm giảm đáng kể chi phí thu gom trong thực tế (giả thuyết thế hệ).
- Phân loại các kỹ thuật thu gom
- Wilson và Sổ tay Thu gom Rác tổ chức không gian thiết kế của việc đếm tham chiếu, đánh dấu-quét, sao chép, thu gom tăng dần và đồng thời cũng như các sự đánh đổi về hiệu suất của chúng.
Clinical relevance
Quản lý bộ nhớ tự động loại bỏ toàn bộ các loại lỗi như con trỏ treo và rò rỉ bộ nhớ, đó là lý do tại sao hầu hết các ngôn ngữ cấp cao đều dựa vào việc thu gom rác. Việc lựa chọn bộ thu gom ảnh hưởng mạnh mẽ đến độ trễ và thông lượng của ứng dụng, đặc biệt đối với các hệ thống tương tác và máy chủ.
History
McCarthy đã giới thiệu việc thu gom rác với Lisp vào năm 1960. Việc thu gom sao chép (Cheney) và đếm tham chiếu đã ra đời sau đó, và bộ thu gom thế hệ của Lieberman và Hewitt năm 1983 đã khai thác vòng đời của đối tượng. Các thập kỷ tiếp theo đã tạo ra các bộ thu gom tăng dần, đồng thời và dựa trên vùng, được khảo sát toàn diện trong công trình của Wilson năm 1992 và Sổ tay Thu gom Rác năm 2011.
Debates
- Thu gom tự động so với quản lý thủ công hoặc dựa trên quyền sở hữu
- Các nhà thiết kế tranh luận về việc thu gom rác, an toàn và tiện lợi nhưng có thể gây ra các khoảng dừng và chi phí, so với quản lý thủ công hoặc dựa trên quyền sở hữu, cung cấp hiệu suất dự đoán được và dung lượng thấp hơn với chi phí là gánh nặng và rủi ro cho lập trình viên.
Key figures
- John McCarthy
- Henry Lieberman
- Carl Hewitt
- Richard Jones
- Paul Wilson
Related topics
Seminal works
- mccarthy1960
- lieberman1983
- wilson1992
- jones2011
Frequently asked questions
- Làm thế nào một bộ thu gom rác biết đối tượng nào cần giải phóng?
- Một bộ thu gom theo dõi bắt đầu từ các gốc đã biết, chẳng hạn như các biến ngăn xếp và biến toàn cục, và theo dõi các tham chiếu để đánh dấu tất cả các đối tượng có thể truy cập được; bất cứ thứ gì không được truy cập đều không thể truy cập được và có thể được thu hồi.
- Tại sao thu gom rác thế hệ lại hiệu quả?
- Bởi vì hầu hết các đối tượng trở nên không thể truy cập được ngay sau khi cấp phát, việc thu gom thế hệ trẻ thường xuyên sẽ thu hồi hầu hết rác một cách rẻ tiền trong khi các đối tượng cũ hơn, tồn tại lâu hơn được quét ít thường xuyên hơn nhiều.