Tôi quan tâm đến cách hoạt động của bộ sưu tập rác. Tôi đã đọc về cách một số công việc như đánh dấu và quét, dừng và sao chép, GC thế hệ, vv ... Tôi muốn thử nghiệm với việc thực hiện một số điều này và so sánh hành vi của chúng. Một cách hay để bắt đầu thử nghiệm với của riêng tôi là gì? Lý tưởng nhất là một cái gì đó trong C, Java hoặc Python (mặc dù cuối cùng hai là mình thu gom rác do đó có vẻ như nó sẽ khó sử dụng chúng ...)Tôi có thể thử nghiệm thu gom rác bằng cách nào?
Trả lời
Không bao giờ tự chơi với nó, nhưng cái luôn được đề cập để sử dụng với C/C++ là Hans Boehm's.
Thực hiện JVM của riêng bạn. Không có gì lạ mắt, chỉ là những điều cơ bản. Có rất nhiều chương trình/trình biên dịch/ngôn ngữ tạo mã JVM để bạn có nhiều tài liệu để kiểm tra.
Thời gian chạy .NET và Java runtime giờ đây là nguồn mở, vì vậy bạn có thể thử nghiệm với thời gian chạy nó nếu bạn muốn chơi xung quanh bằng ngôn ngữ lập trình hỗ trợ hiện tại. Tuy nhiên, nếu bạn muốn tự mình làm điều này, bạn có lẽ sẽ phải tạo thời gian chạy của riêng bạn mà nó có ngôn ngữ riêng của nó.
Vui chơi với, nhưng thu gom rác thải là một tác phẩm nghệ thuật tối. Không phải để làm cho nó hoạt động, nhưng để làm cho nó hoạt động với hiệu quả mà các máy ảo mới nhất làm.
Chúng tôi đang nói nhiều giai đoạn và phép thuật giúp phân bổ tốc độ so sánh hơn với phân bổ stack hơn so với malloc.
Toàn bộ đá khái niệm eden.
Bạn có thể muốn đọc một số thông tin chi tiết về các kỹ thuật được sử dụng.
Dưới đây là một bài viết mà dường như có một cái nhìn tổng quan tốt (chỉ cần từ một google nhanh chóng/scan)
-1: "bộ sưu tập rác là một nghệ thuật tối". Xin lỗi nhưng tôi nghĩ rằng đó là phản tác dụng để làm cho báo cáo như thế này khi bạn có thể viết một nhà sưu tập rác phong nha trong 100 dòng mã. –
@Jon Harrop Làm một GC đơn giản là dễ dàng (chính xác những gì tôi đã nói trong câu trả lời của tôi), một nghệ thuật tối là làm cho nó làm việc với hiệu quả của các máy ảo mới hơn là gì. Bạn có thực sự không đồng ý với điều đó không? Bạn đã xem xét những gì các máy ảo mới làm? –
@Bill: Tôi đã viết blog này: http://flyingfrogblog.blogspot.com/2010/09/are-multicore-capable-garbage.html –
Slava Pestov người developes các Factor programming language đã viết một số bài viết về thực hiện của ông về một nhà sưu tập rác. Bạn có thể tìm thấy bài viết trên nó với liên kết này:
http://factor-language.blogspot.com/search?q=garbage+collection
trong bắt đầu cụ thể từ các bài đăng trên Chủ Nhật 24 thg 9, 2006.
Liên kết đó đã bị hỏng. Nó có thể là http://docs.parrot.org/parrot/latest/html/docs/pdds/pdd09_gc.pod.html – DarenW
MMTk chứa một tập hợp lớn các bộ thu gom rác hiệu suất cao. Nó bao gồm:
- sao chép sưu tập
- Tracing nhà sưu tập
- đếm tham khảo nhà sưu tập
Nó cũng có:
- Dừng các nhà sưu tập trên thế giới
- nhà sưu tập đồng thời
Vì đây là nền tảng nghiên cứu nên có một số nhà sưu tầm trước như generation reference counting collector.
- 1. Thu gom rác trễ?
- 2. Thu gom rác thủ công bằng Python
- 3. Thu gom rác trong Perl
- 4. Buộc thu gom rác thải
- 5. Khi nào để thu gom rác
- 6. Có thể ngừng thu gom rác thải .NET không?
- 7. Làm thế nào tôi có thể xem java thu gom rác nào đang sử dụng
- 8. Làm thế nào tôi có thể xác định đối tượng nào đang được thu thập bởi bộ thu gom rác?
- 9. Thời gian thu gom rác cực dài
- 10. đế và bộ thu gom rác Đi
- 11. JRuby - Cách khởi động bộ thu gom rác?
- 12. Bộ thu gom rác có gọi là Dispose() không?
- 13. Buộc thu gom rác của mảng, C#
- 14. Thông báo thu gom rác thải?
- 15. Thông báo Thu gom Rác Bỏ lỡ
- 16. đa và thu gom rác thải
- 17. Thu gom rác - các nút gốc
- 18. Đối tượng COM này có bị thu gom rác không?
- 19. Tham khảo chéo và thu gom rác
- 20. Công cụ thu gom rác cho dalvik
- 21. Có một JVM thiếu bộ thu gom rác không?
- 22. Khi nào đối tượng thu gom rác trong python?
- 23. Thuật toán thu gom rác đơn giản để thử nghiệm với một thông dịch viên đơn giản là gì?
- 24. Tại sao Ada không có bộ thu gom rác?
- 25. Khi nào bộ thu gom rác net hoạt động?
- 26. Các loại giá trị có được thu gom rác không?
- 27. Java - các thuật toán thu gom rác sẵn có
- 28. Các trường tĩnh có mở để thu gom rác không?
- 29. Thu gom rác Java G1 trong sản xuất
- 30. Ruby: Đánh dấu một đối tượng để thu gom rác
Chỉ cần thêm rằng đây được coi là * bộ sưu tập rác của sự lựa chọn nếu bạn muốn ở trong C/C++ thay vì sử dụng máy ảo ... –
+1, tôi sử dụng nó thường xuyên khi tôi đang làm việc trên một cái gì đó cực kỳ phức tạp, nơi một đôi miễn phí() sẽ đánh vần thảm họa. –
Đúng vậy, đó cũng là GC đang được dự án gcc sử dụng. – none