Đây là nhược điểm lớn của truyền thống reference counting garbage collection. Thuộc tính của một bộ thu gom rác mô tả hành vi này là một bộ thu không đầy đủ. Những người thu gom khác phần lớn rơi vào một nhóm được gọi là truy tìm những người thu gom rác, bao gồm quét đánh dấu truyền thống, bán không gian/đầm nén và lai tạo thế hệ, và không bị những hạn chế này (nhưng phải đối mặt với nhiều người khác).
Tất cả các triển khai JVM và CLI Tôi biết sử dụng bộ thu hoàn chỉnh, có nghĩa là chúng không gặp phải vấn đề cụ thể mà bạn đang hỏi tại đây. Theo hiểu biết của tôi, trong số Jikes RVM là người duy nhất cung cấp bộ đếm đếm tham chiếu (một trong nhiều bộ sưu tập của nó).
Một điều thú vị cần lưu ý là có các giải pháp cho vấn đề đầy đủ trong bộ sưu tập đếm đếm tham chiếu, và resulting collectors chứng minh một số đặc tính hiệu suất thú vị khó thoát khỏi bộ thu thập truy tìm. Thật không may, các thuật toán thu gom rác đếm tham chiếu hiệu suất cao nhất và các sửa đổi hoàn chỉnh nhất dựa trên sự trợ giúp của trình biên dịch, do đó việc đưa chúng vào các số shared_ptr<T>
của C++ rất khó khăn/không xảy ra. Thay vào đó, chúng tôi có weak_ptr<T>
và documented rules (xin lỗi về liên kết phụ tối ưu - dường như tài liệu hướng dẫn tôi) chỉ đơn giản là tránh các vấn đề. Điều này isn't the first time (một liên kết tầm thường) chúng tôi đã thấy cách tiếp cận này, và hy vọng là công việc bổ sung để ngăn chặn các vấn đề bộ nhớ ít hơn số lượng công việc cần thiết để duy trì mã không sử dụng shared_ptr<T>
, v.v.
các liên kết tầm thường là vì nhiều tài liệu tham khảo của tôi nằm rải rác trong các ghi chú từ lớp quản lý bộ nhớ của học kỳ cuối cùng.
Nguồn
2009-08-03 19:53:23
Thực tế, đây là một trong những vấn đề với môi trường tính tham chiếu ** được xử lý ** trong .NET GC. –
Tuy nhiên, một tính năng truyền thống của Lisp khác đang đi vào môi trường chính thống. –