Câu trả lời:
Nó sẽ xử lý các vấn đề quản lý bộ nhớ cổ điển (bộ nhớ được phân bổ không bị vô hiệu hóa khi không sử dụng nữa), mặc dù vẫn có thể bị rò rỉ bộ nhớ với hệ thống GC - điều này sẽ tinh tế hơn và sẽ xảy ra khi các đối tượng vẫn giữ tham chiếu cho các đối tượng khác, ngay cả khi họ không còn cần thiết.
Xem câu hỏi Tại sao .NET không thể bị rò rỉ bộ nhớ? và đó là câu trả lời trên StackOverflow.
Có thể x. tình huống khi bạn muốn kiểm soát hoàn toàn việc cấp phát bộ nhớ, nhưng thật lòng mà nói, lợi ích của hệ thống GC là thông thường mà bạn sẽ không cần.
Có nhiều vấn đề về bộ nhớ (con trỏ lơ lửng, tràn bộ đệm và tương tự) và các vấn đề tài nguyên (rò rỉ bộ nhớ, rò rỉ tài nguyên khác). Người thu gom rác chăm sóc:
Ngôn ngữ không cho phép số học con trỏ đảm nhiệm:
Không thể giải quyết các trường hợp khác về vấn đề tài nguyên khi bạn quên xóa tham chiếu đến bộ nhớ / tài nguyên từ một nơi nào đó, do đó bạn vẫn có thể bị rò rỉ bộ nhớ với GC (Các đối tượng ngoại lệ đặc biệt đáng chú ý khi tham khảo nhiều điều bạn không biết).
Mặc dù GC có thể giúp bạn giải phóng các tài nguyên khác ngoài bộ nhớ bằng cách sử dụng bộ hoàn thiện (bộ hủy), nhưng nó sẽ giải phóng các tài nguyên đó với độ trễ không xác định, thường không phù hợp với các tài nguyên như tệp hoặc ổ cắm mạng. Để xử lý loại vấn đề tài nguyên này, bạn cần một số cấu trúc ngôn ngữ cho các tài nguyên có phạm vi như sử dụng câu lệnh trong C #, thành ngữ RAII trong C ++ hoặc phần mở rộng mới nhất để thử cú pháp trong Java 7 và nó vẫn chỉ có ích, vì bạn cần sử dụng nó trong mã .
Không cho phép số học con trỏ và tạo địa chỉ từ các số là cần thiết để có thể chạy trình thu gom rác chính xác. Một số tối ưu hóa hữu ích như nén chỉ có thể được thực hiện trong các bộ sưu tập chính xác (bạn chỉ có thể di chuyển các đối tượng nếu bạn có thể biết chắc chắn tham chiếu là gì, vì vậy bạn có thể cập nhật nó; bạn không thể làm điều đó trong C / C ++).
Bộ sưu tập rác hoạt động tốt cho bộ nhớ. Nếu bạn có rất nhiều bộ nhớ, tại sao phải chạy xung quanh để dọn sạch từng byte như đã hoàn thành? GC thường phản ứng với "áp lực bộ nhớ" và dọn dẹp khi cần thiết. Đây là một điều tốt cho bộ nhớ. Tuy nhiên, nếu bạn có một đối tượng chứa tài nguyên không phải bộ nhớ (xử lý tệp, kết nối cơ sở dữ liệu, khóa) cho đến khi áp suất bộ nhớ kích hoạt thì GC thường có nghĩa là giữ tài nguyên đó quá lâu. Bạn cần một cách tiếp cận khác cho những tài nguyên đó. Điều đó có thể có nghĩa là một tài liệu chia sẻ tham chiếu, với bản phát hành xác định khi số tham chiếu đạt đến 0 hoặc cách tiếp cận sử dụng / Loại bỏ của .NET.
Hệ thống GC là một phần mềm cố gắng tối ưu hóa việc sử dụng bộ nhớ cho một chương trình đang chạy.
Hệ thống GS là trách nhiệm và là một thành phần của khung (JVM / .NET).
Nó có thể giải phóng bộ nhớ cho một số đối tượng mà nó dự đoán là sẽ không cần thiết cho một ứng dụng sau một điểm nhất định trong quá trình xử lý.
Trong .NET, nó chỉ có thể giải phóng bộ nhớ cho một số đối tượng gốc .NET và không cho đối tượng MS COM.
Các đối tượng MS COM được sử dụng trong .NET phải được giải phóng rõ ràng.
Người giới thiệu: