2011-10-27 23 views
5

Gen 0: Vì vậy, tôi đọc rằng gen 0 kích hoạt khi gen 0 vượt quá ngưỡng kích thước. Nhưng tôi cũng đọc rằng GC không được thực hiện tại một "mới", bởi vì "mới" chỉ đơn thuần là trượt một địa chỉ về phía trước. Sau đó, khi nào nó kiểm tra nó đã vượt quá ngưỡng để kích hoạt gen 0 GC?Khi nào gen 0, gen 1, gen 2 kích hoạt chính xác?

Gen 1/2: Do gen 1/2 có ngưỡng kích thước riêng kích hoạt GC không? Khi nào họ xem xét ngưỡng? Đó có phải là thời điểm những người sống sót được thăng tiến về gen không? Điều đó có nghĩa là một gen 1 GC xảy ra trước tiên nó kiểm tra gen 0, sau đó thúc đẩy chúng vào gen 1, chỉ để tìm gen 1 đã vượt quá ngưỡng và vì vậy nó kiểm tra gen 1, và kiểm tra gen 0 một lần nữa? Không. Và điều đó có nghĩa là một gen 2 GC xuất hiện lần đầu tiên kiểm tra gen 0, sau đó quảng bá gen 1, chỉ để tìm gen 1 vượt quá ngưỡng và vì vậy nó kiểm tra gen 1 và kiểm tra gen 0 lần nữa. Quay lại đầu trang | Sau đó thúc đẩy gen 0 đến gen 1 và gen 1 đến gen 2, chỉ để tìm gen 2 đã vượt quá ngưỡng và vì vậy nó kiểm tra gen 2, gen 1 một lần nữa, và gen 0 một lần nữa nữa?

+4

Tất cả các chi tiết này là chi tiết triển khai nội bộ độc quyền, thay đổi từ triển khai sang triển khai và có thể thay đổi bất kỳ lúc nào. Ngoài ra, GC chạy trên chủ đề riêng của nó, do đó, lập lịch trình luồng cũng là một yếu tố. Nếu bạn có thể nói lý do tại sao bạn quan tâm, điều đó sẽ giúp bạn có được câu trả lời tốt hơn. Ví dụ, nếu bạn quan tâm, vì bạn muốn biết khi nào bạn đang gặp nguy hiểm của một bộ sưu tập đắt tiền xảy ra vào thời điểm xấu, có nhiều cách bạn có thể tìm ra * mà không biết chi tiết bên trong của GC. –

+0

Tôi quan tâm vì tôi phải giải thích nó cho những người hoàn toàn không biết GC và tôi thấy rằng tôi chỉ biết hiệu quả nhưng tôi không biết nguyên nhân. Tôi cũng không biết đó không phải là chi tiết thực hiện và đó là như vậy mà tôi không phải giải thích. –

+1

Nếu bạn quan tâm khi GC khởi động, bạn đang làm sai. – leppie

Trả lời

0

Bộ khởi động Gen 0 khi máy ảo hết bộ nhớ.
Gen 1 kích hoạt khi Gen 0 không giải phóng đủ bộ nhớ và bộ nhớ vẫn còn thiếu bộ nhớ.
Gen n kích hoạt khi Gen n - 1 không giải phóng đủ bộ nhớ và bộ nhớ vẫn còn thiếu bộ nhớ.
Nếu nó đến Gen cuối cùng và nó vẫn không đủ bộ nhớ, bộ nhớ mới sẽ được cấp phát.

+0

Bạn có ý nói rằng gen GC 2 xuất hiện lần đầu tiên kiểm tra gen 0, sau đó quảng bá gen 1, chỉ để tìm gen 1 vượt quá ngưỡng và vì vậy nó kiểm tra gen 1 và kiểm tra gen 0 lần nữa. Sau đó thúc đẩy gen 0 đến gen 1 và gen 1 đến gen 2, chỉ để tìm gen 2 đã vượt quá ngưỡng và vì vậy nó kiểm tra gen 2, gen 1 một lần nữa, và gen 0 một lần nữa nữa? –

+0

Mọi thứ được quảng bá sau khi bộ nhớ đã ổn và bất kể bộ sưu tập có thành công hay không. Sau khi đi đến gen 1 và bộ sưu tập không thành công, nó sẽ đi đến gen2, không quay lại. – Dani

1

Sau khi CLR khởi tạo, các đối tượng được thêm lần đầu tiên vào vùng được quản lý được định nghĩa là Gen0. Khi GC thực hiện, việc tạo ra các đối tượng không được thu thập sẽ tăng thêm 1 mức và trở thành Gen1. Các đối tượng được tạo sau đó vẫn là Gen0. Với các đối tượng được tạo ra, Chỉ khi bộ nhớ được phát hành bởi các đối tượng Gen0 là không đủ để tạo ra các đối tượng mới và khối lượng trong Gen1 vượt quá dung lượng, GC sẽ thu thập cả đối tượng Gen0 và Gen1. Sau đó, các đối tượng không được thu thập trong Gen1 sẽ trở thành Gen2, và các đối tượng không được thu thập trong Gen0 sẽ trở thành Gen1. Các đối tượng được tạo sau đó vẫn là Gen0.

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