blog đầu tiên của tôi trả lời câu hỏi của bạn: Generations of Garbage Allocation
Thêm thông tin về liên kết:
thu rác của CLR (GC) là một nhà sưu tập rác thế hệ, còn được gọi là nhà sưu tập ephermal rác.
Nó có ba thế hệ:
thế hệ 0: Nó chứa tất cả các đối tượng mới được xây dựng mà không bao giờ được kiểm tra bằng phương pháp GC.
Thế hệ 1: CLR, khi khởi tạo, chọn kích thước ngân sách bằng kb cho thế hệ 0. Nếu việc tạo đối tượng làm cho thế hệ 0 vượt quá ngân sách của nó, thì việc thu thập rác sẽ bắt đầu. Các đối tượng không được thu thập trong thế hệ 0 được di chuyển đến thế hệ 1 và thế hệ 0 được làm trống. Giả sử ngân sách của Thế hệ 0 bằng kích thước của 5 đối tượng. Vì vậy, thế hệ 0 sẽ trông giống như dưới đây trước khi tạo ra các đối tượng 6:
Sau khi tạo ra các đối tượng 6, phân bổ rác được bắt đầu mà deallocates các đối tượng rác 1, 3 và 5 và di chuyển 2 và 4 tiếp giáp với mỗi khác trong thế hệ 1.
Kích thước ngân sách của thế hệ 1 cũng được chọn bởi CLR khi khởi tạo. Tạo ra các đối tượng 11 gây GC để bắt đầu một lần nữa có thể di chuyển một số đối tượng hơn đối với thế hệ 1.
thế hệ 1 là bỏ qua cho Garbage Collection cho đến khi nó đạt đến kích thước ngân sách của nó cho Thu gom rác, giúp cải thiện hiệu suất của GC.
thế hệ 2:
Trong vài thế hệ 0 bộ sưu tập, thế hệ 1 có thể vượt qua giới hạn ngân sách của nó gây GC để thu thập rác từ cả hai thế hệ. Trong trường hợp này, những người sống sót trong thế hệ 1 được quảng bá cho thế hệ 2, những người sống sót sau thế hệ 0 được thăng cấp thành thế hệ 1 và thế hệ 0 trống.
Giả sử đối tượng phân bổ 21 gây ra thu gom rác thải và ngân sách thế hệ 1 đã đạt được.
Vì vậy, đống sẽ trông giống như dưới đây với các đối tượng mà sống sót trong thế hệ này sang thế hệ 1 bạt 2.
Vì vậy, về cơ bản thế hệ GC giả định rằng đối tượng mới có khả năng hơn để thu thập.
Chúng tôi biết rằng CLR chọn ngân sách cho cả ba thế hệ nhưng nó có thể sửa đổi chúng khi GC là một bộ thu tự điều chỉnh. Nếu GC thấy rằng có rất ít các đối tượng còn sống sau khi thu thập thế hệ 0, nó có thể quyết định giảm ngân sách của thế hệ 0, do đó công việc ít hơn được thực hiện. Mặt khác, nếu GC thu thập thế hệ 0 và thấy rằng có rất nhiều đối tượng còn sống sót, không có nhiều bộ nhớ được thu hồi trong bộ sưu tập rác. Trong trường hợp này, người thu gom rác sẽ tăng ngân sách của thế hệ 0. GC cũng sửa đổi ngân sách của thế hệ 1 và thế hệ 2 tương ứng.
Xin chào, bạn có thể cho tôi biết khi nào người thu thập thu thập các đối tượng không? Sau khi thực hiện mọi phương pháp? – Bigeyes
Không thích hợp để đặt câu hỏi làm nhận xét trong câu hỏi 7 năm tuổi. Mỗi hướng dẫn Java sẽ cho bạn biết rằng GC chạy trên một luồng riêng biệt tại thời điểm lựa chọn của nó. – duffymo
@duffymo và Java hướng dẫn phải làm gì với câu hỏi Bigeyes? Từ câu hỏi của OP của tôi là về số .net – MaLiN2223