Có một thuật toán thu thập rác không thực tế hoàn toàn đáp ứng tất cả các yêu cầu của bạn: tính toán tự động đơn giản. Nhìn chung, việc trả lại thực sự không có đủ tín dụng như một lựa chọn khả thi, nhưng thực sự nó hoạt động rất tốt trong nhiều tình huống, không bao giờ có bất kỳ sự chậm trễ lớn nào, và không cần ma thuật phức tạp.
Một mối quan tâm vẫn đang làm sạch tài liệu tham khảo vòng tròn, mà bạn ít nhất có thể để được thực hiện rất hiếm khi; các nhà phát triển ứng dụng quan tâm đến tốc độ chỉ có thể phá vỡ vòng lặp một cách rõ ràng khi họ cần các đối tượng biến mất.
Một tính năng được đánh giá rất ít về việc đếm ngược là tính năng thân thiện hơn nhiều so với các hình thức thu gom rác khác.Nếu bạn đang chạy một vòng lặp phân bổ một số đối tượng tạm thời nhỏ mỗi lần thông qua vòng lặp, thì việc đếm ngược GC (hoặc quản lý bộ nhớ rõ ràng) có thể tái sử dụng cùng một bộ nhớ mỗi lần, tránh các bộ nhớ cache không cần thiết. Bất kỳ loại GC nào khác sẽ chỉ giải phóng các đối tượng theo định kỳ, dẫn đến dấu chân bộ nhớ lớn hơn nhiều và do đó sẽ chậm đi.
Việc tính toán lại không hiệu quả đối với các hệ thống đa luồng nhiều, bởi vì bạn cần phải lấy khóa mỗi khi bạn chạm vào số lần truy cập. Nhưng nếu bạn đang thiết kế một ngôn ngữ mới dù sao đi nữa, có một điều rất lớn bạn có thể làm để cải thiện hiệu suất và độ tin cậy trên tất cả ngôn ngữ của bạn: ngăn hầu như tất cả các đối tượng không bị chia sẻ giữa các luồng. I E. chia sẻ rõ ràng. Nếu bạn làm điều đó, bạn sẽ biết các đối tượng nào là so với không được chia sẻ, và do đó những đối tượng cần phải được khóa khi tăng/giảm số lượng refcount và có thể được mở khóa bên trái. Khi không có bất kỳ khóa nào, hiệu năng đếm ngược có thể thực sự tuyệt vời.
Nếu bạn nhắm mục tiêu nền .NET hoặc Java, bạn sẽ nhận được miễn phí. –
Dưới đây là một loạt bài viết [ridiculously tốt] (http://blogs.msdn.com/b/abhinaba/archive/2009/01/25/back-to-basic-series-on-dynamic-memory-management.aspx) về thu gom rác thải. – jason
@Henk, anh ấy đang viết một trình biên dịch – ThomasMcLeod