Tôi đã thử nghiệm với thiết kế ngôn ngữ lập trình và đã đến mức cần triển khai hệ thống thu gom rác. Bây giờ điều đầu tiên xuất hiện trong đầu bạn là đếm tham chiếu, nhưng điều này sẽ không xử lý các vòng tham chiếu. Hầu hết các trang mà tôi gặp phải khi tìm kiếm các thuật toán là các tham chiếu về điều chỉnh các bộ thu gom rác trong các ngôn ngữ hiện có, chẳng hạn như Java. Khi tôi tìm thấy bất cứ điều gì mô tả thuật toán cụ thể, tôi không nhận được đủ chi tiết để triển khai. Ví dụ: hầu hết các mô tả bao gồm "khi chương trình của bạn sắp hết bộ nhớ ...", điều này không có khả năng xảy ra bất kỳ lúc nào sớm trên hệ thống 4 GB với nhiều trao đổi. Vì vậy, những gì tôi đang tìm kiếm là một số hướng dẫn với các chi tiết thực hiện tốt như cách điều chỉnh thời điểm khởi động bộ thu gom rác (tức là thu thập sau số lần cấp phát bộ nhớ X hoặc mỗi phút Y, v.v.).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ì?
Để cung cấp thêm một vài chi tiết về những gì tôi đang cố gắng, tôi bắt đầu bằng cách viết một trình thông dịch dựa trên stack tương tự như Postscript, và nỗ lực tiếp theo của tôi có thể là ngôn ngữ biểu thức S dựa trên của các phương ngữ Lisp. Tôi đang thực hiện thẳng C. Mục tiêu của tôi là cả tự học, và ghi lại các giai đoạn khác nhau thành một hướng dẫn "cách thiết kế và viết một thông dịch viên".
Đối với những gì tôi đã làm cho đến nay, tôi đã viết một trình thông dịch đơn giản, thực hiện ngôn ngữ mệnh lệnh kiểu C, được phân tích và xử lý bởi máy ảo kiểu máy xếp chồng (xem lang2e.sourceforge.net). Nhưng ngôn ngữ này không cấp phát bộ nhớ mới khi nhập bất kỳ hàm nào, và không có bất kỳ kiểu dữ liệu con trỏ nào, do đó không cần thiết cho bất kỳ kiểu quản lý bộ nhớ nâng cao nào. Đối với dự án tiếp theo của tôi, tôi đang nghĩ đến việc bắt đầu với việc đếm tham chiếu cho các đối tượng kiểu không phải con trỏ (số nguyên, chuỗi, vv), và sau đó theo dõi bất kỳ đối tượng kiểu con trỏ nào (có thể tạo tham chiếu vòng tròn) trong một nhóm bộ nhớ riêng biệt . Sau đó, bất cứ khi nào hồ bơi phát triển hơn X đơn vị phân bổ nhiều hơn vào cuối chu kỳ thu gom rác trước đó, hãy khởi động lại bộ thu thập.
Yêu cầu của tôi là nó không quá kém hiệu quả, dễ thực hiện và tài liệu rõ ràng (hãy nhớ, tôi muốn phát triển điều này thành một bài báo hoặc sách để người khác theo dõi). Thuật toán mà tôi hiện đang có ở mặt trước là đánh dấu ba màu, nhưng có vẻ như một nhà sưu tập thế hệ sẽ tốt hơn một chút, nhưng khó hơn trong việc ghi chép và hiểu. Vì vậy, tôi đang tìm một số tài liệu tham khảo rõ ràng (tốt nhất là có sẵn trực tuyến) bao gồm đủ chi tiết triển khai để giúp tôi bắt đầu.
Google 'Mark and Sweep' –
Tôi nên thêm rằng tôi đã thấy mô tả của một số nhà sưu tập rác, chẳng hạn như các biến thể về đánh dấu và quét, nhưng hầu hết các trang tôi đã chạy không tốt hơn nhiều so với Bài viết trên Wikipedia. Ví dụ, như tôi đã đề cập trong câu hỏi, họ nói để đá nó khi bộ nhớ bị thấp. Điều đó không có khả năng xảy ra trên các hệ thống hiện đại trong suốt thời gian chạy của hầu hết các kịch bản nhẹ, và thậm chí nếu nó có, nó sẽ không tốt để sử dụng hết bộ nhớ hệ thống trước khi khởi động bộ thu. Chi tiết như vậy là những gì tôi đang tìm kiếm. –
http://doc.cat-v.org/inferno/concurrent_gc/ - phải là quá đủ chi tiết để triển khai. –