2010-09-26 36 views
9

Người thu gom rác di chuyển, chẳng hạn như người thu gom thế hệ, phải chịu thêm mã được tạo để lưu trữ và tải lại tài liệu tham khảo qua các điểm an toàn GC. Có ai định lượng chi phí hoạt động của chi phí này so với một nhà sưu tập không di chuyển không?Chi phí của người thu gom rác di chuyển

Tôi hỏi vì tôi quan tâm đến việc thiết kế một nhà sưu tập có thể tái chế các giá trị sống ngắn một cách hiệu quả mà không phải di chuyển chúng.

+0

cũng thử tại http://cstheory.stackexchange.com/ – oluies

+1

Họ có quan tâm đến các phép đo hiệu suất không? –

Trả lời

6

Sự cân bằng chuyển động và không chuyển động là một sự phức tạp. Tôi không biết về bất kỳ nghiên cứu cụ thể nào về khía cạnh mà bạn đề cập - thực ra, tôi không chắc tôi hiểu nó hoàn toàn: GC chính xác luôn cần biết tất cả các con trỏ ở đâu, vì vậy có lẽ bạn đang nói về bảo thủ GC không di chuyển? GC bảo thủ theo ý kiến ​​của tôi là một lựa chọn tồi nếu bạn có đủ quyền kiểm soát đường dẫn biên dịch để có thể thực hiện GC chính xác.

Các khía cạnh khác ảnh hưởng đến hiệu suất của việc di chuyển so với phi di chuyển GC là: tốc độ

  • Phân bổ. GC không di chuyển có thể phải phân bổ từ một danh sách miễn phí, trong khi GC coying có thể sử dụng phân bổ con trỏ bump. Đề án hỗn hợp như Immix cố gắng đánh cuộc tốt hơn giữa hai phương án.

  • Hành vi cục bộ và bộ nhớ cache. Có rất nhiều nghiên cứu về điều này cho cả GC di chuyển và không chuyển động; xem GC Bibliography. Nói chung, tính năng nén là tốt cho cache, mặc dù sao chép GC thường là chiều rộng đầu tiên, là một lựa chọn tồi (các mẫu truy cập có chiều sâu) vì vậy có một loạt nghiên cứu trong khu vực này đang cố gắng sắp xếp lại các đối tượng để phù hợp với mẫu truy cập .

Ý kiến ​​cá nhân của riêng tôi là hỗ trợ phân bổ nhanh chóng, bạn cần có một bộ sưu tập sao chép và phân phối con trỏ. Nếu bạn làm bất cứ điều gì khác, phân bổ trở nên đắt hơn mà xiên rất nhiều thứ: tối ưu hóa để giảm phân bổ trở nên quan trọng hơn, vì vậy bạn sẽ phải nỗ lực chi tiêu và làm cho mọi thứ trở nên phức tạp hơn. Tôi muốn phân bổ thực sự thực sự rẻ và sau đó không phải lo lắng về nó.

+0

Tôi hiểu, đó cũng là ấn tượng của tôi. Tôi đã nói về các GC không di chuyển chính xác (không bảo thủ) giống như một trong các HLVM tại thời điểm này. Nó biết chính xác nơi mà tất cả các root và con trỏ trong heap toàn cầu, nhưng bởi vì chúng không bao giờ di chuyển, nó có thể giữ chúng trong các thanh ghi trên các điểm an toàn và không bao giờ phải lặp lại chúng cập nhật chúng sau một bộ sưu tập chuyển động. Hmm, phải có một số cách để có được tốt nhất của cả hai thế giới ... có lẽ bạn cần phải gián tiếp tất cả các tài liệu tham khảo để di chuyển các đối tượng thông qua một LUT toàn cầu ... –

+0

@ JonHarrop: Kể từ khi tôi bắt đầu lập trình "cổ điển" Macintosh, Tôi đã rất ấn tượng với sức mạnh của đôi tay cầm gián tiếp. Tôi nghĩ rằng với một chút hỗ trợ phần cứng như một mô hình có thể cung cấp một số lợi thế tốt đẹp (ví dụ như có thể có một bộ thu rác hiệu quả mà sẽ không chặn bất kỳ chủ đề nào trừ khi nó cố gắng ghi vào một đối tượng trong khi nó đang được di chuyển, trường hợp đó chỉ có thể bị chặn cho đến khi di chuyển cụ thể đó hoàn tất). Tôi cũng nghĩ rằng các đối tượng lớn nên được căn chỉnh trên các ranh giới 4K và sử dụng thay thế ảo thay vì di chuyển vật lý. – supercat