2013-06-05 28 views
6

Thuật toán thu gom rác nào có thể nhận ra các đối tượng rác ngay sau khi chúng trở thành rác?Thuật toán thu thập rác thải "thời gian chính xác" tồn tại?

Điều duy nhất xuất hiện trong tâm trí của tôi là tính tham chiếu với tìm kiếm chu kỳ bổ sung mỗi khi số lượng tham chiếu bị giảm xuống giá trị khác 0.

Có bất kỳ thuật toán thu thập thú vị nào khác có thể đạt được điều đó không? (Lưu ý rằng tôi chỉ tò mò về sự tò mò) Tôi biết rằng tất cả những người thu gom như vậy sẽ vô cùng hiệu quả)

+0

Có một bài đăng hôm nay trên Tin tức Hacker về GC thời gian thực. (Tôi không đọc nó) – leppie

+0

Bạn có thể chạy GC đánh dấu và quét sau mỗi thay đổi tham chiếu. Mặc dù điều đó sẽ vô cùng hiệu quả. – svick

+0

@svick: Bạn nói đúng. Bây giờ tôi cảm thấy ngu ngốc :) – Askaga

Trả lời

-4

Cơ chế này sẽ được gọi là "quản lý đống" chứ không phải thu gom rác.

Theo định nghĩa, bộ sưu tập rác được tách riêng khỏi quản lý heap. Điều này là bởi vì trong một số môi trường/ứng dụng nó là hiệu quả hơn để bỏ qua làm một hoạt động "miễn phí" và theo dõi những gì đang được sử dụng. Thay vào đó, mỗi một lần trong một thời gian, chỉ cần trước đây xung quanh và thu thập tất cả các nút unreferenced và đưa chúng trở lại vào danh sách miễn phí.

== Phụ Lục ==

tôi bị downvoted vì âm mưu để sửa các thuật ngữ quản lý đống với thu gom rác thải. Các Wikipedia article đồng ý với việc sử dụng của tôi, và những gì tôi đã học được ở trường đại học, mặc dù đó là vài thập kỷ trước. Các ngôn ngữ như Lisp và Snobol đã phát minh ra nhu cầu thu gom rác thải. Các ngôn ngữ như C không cung cấp môi trường thời gian chạy nặng như vậy; thay vì dựa vào lập trình viên để quản lý việc dọn dẹp các bit và bộ nhớ không sử dụng.

+1

Điều này nghe giống như một nhận xét thuật ngữ với tôi, không thực sự là câu trả lời cho câu hỏi. – svick

+0

Ngoài ra tôi không nghĩ bạn đúng. Tham chiếu * là * một hình thức thu gom rác thải. – svick

+0

@wallyk: Bạn đã đề cập đến một bài viết wikipedia (tại sao không liên kết nó?). Tôi nhìn "quản lý đống" lên trên wikipedia mà chuyển hướng đến "quản lý bộ nhớ" mà chủ yếu là giao dịch với các chi tiết os cấp và kỹ thuật phân bổ, mà không phải là chính xác liên quan đến câu hỏi của tôi. Ngoài ra, như svick đã nhận xét, bài đăng của bạn không thực sự trả lời câu hỏi của tôi. Câu trả lời của bạn về cơ bản giải thích lý do tại sao các nhà sưu tập thực tế không hoạt động trong một vấn đề được đề xuất trong op của tôi, một thực tế tôi đã nhận thức được như tôi đã làm rõ trong câu hỏi của tôi. Tuy nhiên, vui lòng chỉnh sửa câu trả lời của bạn để thực sự trả lời câu hỏi và tôi sẽ upvote nó. – Askaga

0

Mặc dù không phải là thuật toán thu thập rác, phân tích thoát cho phép lý luận về thời gian sống của các đối tượng. Vì vậy, nếu hiệu quả là một mối quan tâm và các đối tượng nên được thu thập không phải trong tất cả, nhưng trong trường hợp "rõ ràng", nó có thể được thuận tiện. Ý tưởng cơ bản là thực hiện phân tích tĩnh của chương trình (tại thời gian biên dịch hoặc tại thời gian tải nếu được biên dịch cho máy ảo) và tìm hiểu xem một đối tượng mới được tạo có thể thoát khỏi một thường trình được tạo ra hay không (do đó tên của phân tích) . Nếu đối tượng không được truyền ở bất kỳ nơi nào khác, không được lưu trữ trong bộ nhớ toàn cục, không được trả về từ thường lệ, vv., Nó có thể được phát hành trước khi trở về từ thói quen này hoặc thậm chí sớm hơn, tại nơi sử dụng cuối cùng của nó.

Các đối tượng không sống lâu hơn cuộc gọi phương thức liên quan có thể được cấp phát trên ngăn xếp thay vì trong heap để chúng có thể được loại bỏ khỏi chu kỳ thu gom rác tại thời gian biên dịch, do đó giảm áp lực lên GC chung.

Các vấn đề liên quan