2011-06-23 32 views
9

Tôi biết các khái niệm về các nhà sưu tập thu gom rác thời gian thực, tăng dần, song song, đồng thời, (mềm/cứng). Nhưng tôi không thể hiểu được chủ yếu là đồng thời GC. Nó khác với GC đồng thời? Có gì khác biệt? Tại sao nó được gọi là chủ yếu là?Máy thu gom rác 'chủ yếu là đồng thời' là gì?

Trả lời

7

Tôi biết các khái niệm về các nhà sưu tập thu gom rác thời gian thực, tăng dần, song song, đồng thời, (mềm/cứng). Nhưng tôi không thể hiểu GC chủ yếu là đồng thời. Nó khác với GC đồng thời? Có gì khác biệt? Tại sao nó được gọi là chủ yếu?

Giống như nhiều chủ đề khác, thu gom rác được bao phủ trong sương mù về sự mơ hồ về mặt thuật ngữ.Boehm đặc biệt khét tiếng khi sử dụng các thuật ngữ thông thường theo những cách độc đáo nhưng chúng ta nên tha thứ cho anh ta bởi vì anh ta tiên phong trong lĩnh vực này vào thời điểm mà ý nghĩa thông thường vẫn chưa được khai phá! :-)

Như tôi đã hiểu, GC dừng lại trên thế giới đề cập đến thuật toán tạm dừng tất cả các chuỗi biến thể trong toàn bộ thời lượng của chu kỳ GC, ví dụ: khi đánh dấu toàn bộ đống. Ví dụ, .NET Server GC thực hiện điều này và phát sinh 300ms thời gian tạm dừng lớn như là một hệ quả. Các GC tăng dần thực hiện một chút công việc GC chính tại mỗi chu kỳ GC nhỏ, ví dụ: "lát lớn" trong GC của OCaml. Song song có nghĩa là GC sử dụng nhiều luồng để tăng tốc quá trình thu gom rác thải. GC đồng thời có nghĩa là GC chạy cùng lúc với các trình tắt, ví dụ: .NET workstation GC. Thời gian thực khó xác định, ban đầu có nghĩa là thời gian tạm dừng tối đa nhưng bây giờ cũng có nghĩa là sử dụng mutator tối thiểu (MMU), để tránh vấn đề bệnh lý của GC không bao giờ tạm dừng một mutator trong thời gian dài bằng cách không bao giờ cho phép nó chạy! Theo cuốn sách mới của Richard Jones, một GC on-the-fly không bao giờ đình chỉ nhiều hơn một mutator tại một thời điểm (nghĩa là không có giai đoạn stop-the-world) mặc dù tôi nghi ngờ ông có nghĩa là mutators đang bị đình chỉ độc lập với nhau. Cuối cùng, một GC chủ yếu là đồng thời là một trong đó đình chỉ tất cả các chủ đề mutator đồng thời nhưng chỉ trong một thời gian ngắn và không cho một chu kỳ GC tùy ý dài. Do đó, các mutator được phép chạy tự do hầu hết thời gian trong khi GC đang chạy và, do đó, nó được gọi là GC "chủ yếu đồng thời".

Việc phân loại "chủ yếu đồng thời" là quan trọng vì hầu hết (tất cả?) GC chính rơi vào danh mục này bởi vì nó cung cấp sự cân bằng tốt giữa thời gian tạm dừng và thông lượng. Ví dụ, .NET workstation GC tạm dừng tất cả các luồng mutator khi chụp một snapshot của toàn bộ root nhưng tiếp tục lại trong khi nó đánh dấu và quét.

2

Bạn có thể tìm thấy mô tả có thể truy cập trong giấy "Mostly Parallel Garbage Collection" bởi Bohem, Demers và Shenker (Kỷ yếu của Hội nghị ACM SIGPLAN '91 về thiết kế và thực hiện ngôn ngữ lập trình, SIGPLAN Notices 26, 6 (June 1991), trang 157 -164)

Họ viết:

Giả sử chúng ta có thể duy trì một tập hợp các bit bẩn ảo, đó là tự động thiết lập bất cứ khi nào các trang tương ứng của bộ nhớ ảo được ghi vào. (Việc triển khai có thể chấp nhận tính năng này có thể là thu được bằng các trang ghi bảo vệ và thu được kết quả là viết các lỗi , không sửa đổi hạt nhân hệ điều hành cơ sở; thực hiện trong hạt nhân hệ điều hành sẽ hiệu quả hơn.) bất kỳ bộ thu theo dõi nào được xác định cho hoạt động dừng trên thế giới, xem xét thuật toán thu thập sau đây. Ở đầu bộ sưu tập , xóa tất cả các bit bẩn ảo. Thực hiện thao tác theo dõi truyền thống song song với trình tắt. Các bit bẩn ảo sẽ được cập nhật để phản ánh tính năng ghi đột biến. Sau khi truy tìm được hoàn thành, hãy dừng thế giới và theo dõi từ tất cả các đối tượng được đánh dấu nằm trên các trang bẩn. (Đăng ký được coi là bẩn.) Tại thời điểm này, tất cả các đối tượng có thể truy cập đều được đánh dấu và thùng rác có thể được thu hồi một cách an toàn.

...

Trong thuật toán này, giai đoạn truy tìm song song cung cấp một xấp xỉ vào tập thể truy cập đúng. Các đối tượng duy nhất không được đánh dấu bởi quá trình theo dõi song song này thực sự có thể truy cập phải là có thể truy cập từ các đối tượng được đánh dấu đã được viết từ khi được truy tìm. Dấu vết truy tìm dừng lại trên thế giới từ tất cả các đối tượng như vậy, để cuối cùng không có đối tượng thực sự có thể truy cập nào vẫn không được đánh dấu.

Khi họ tham chiếu đến tracing garbage collectors, chúng đề cập đến người thu thập bắt đầu từ "nút gốc" được chỉ định (thường là đăng ký của chương trình) và làm theo con trỏ tới mọi đối tượng có thể truy cập. Mọi thứ không thể truy cập là rác.

Tóm lại, một bộ thu hầu hết song song thực hiện phần lớn công việc song song, sau đó tạm dừng thực thi chương trình để sửa bất kỳ thay đổi nào mà chương trình đã thực hiện trong khi bộ thu đang chạy. Do đó, nó là "chủ yếu là song song."

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