.NET Core - Garbage Collection và các thông tin bạn nên biết
27/04/2023 01:25
Trong chương này, chúng tôi sẽ đề cập đến khái niệm về bộ sưu tập rác, đây là một trong những tính năng quan trọng nhất của nền tảng mã được quản lý .NET. Bộ thu gom rác (GC) quản lý việc cấp phát và giải phóng bộ nhớ. Trình thu gom rác hoạt động như một trình quản lý bộ nhớ tự động.
Trong chương này, chúng tôi sẽ đề cập đến khái niệm về bộ sưu tập rác, đây là một trong những tính năng quan trọng nhất của nền tảng mã được quản lý .NET. Garbage Collection (GC) quản lý việc cấp phát và giải phóng bộ nhớ. Trình Garbage Collection hoạt động như một trình quản lý bộ nhớ tự động.
-
Bạn không cần biết cách phân bổ và giải phóng bộ nhớ hoặc quản lý thời gian tồn tại của các đối tượng sử dụng bộ nhớ đó
-
Việc phân bổ được thực hiện bất cứ khi nào bạn khai báo một đối tượng với từ khóa “mới” hoặc loại giá trị được đóng hộp. Phân bổ thường rất nhanh
-
Khi không có đủ bộ nhớ để cấp phát một đối tượng, GC phải thu thập và xử lý bộ nhớ rác để cung cấp bộ nhớ cho các cấp phát mới.
-
Quá trình này được gọi là Garbage Collection .
Ưu điểm của việc Garbage Collection
Garbage Collection cung cấp các lợi ích sau −
-
Bạn không cần giải phóng bộ nhớ theo cách thủ công trong khi phát triển ứng dụng của mình.
-
Nó cũng phân bổ các đối tượng trên heap được quản lý một cách hiệu quả.
-
Khi các đối tượng không còn được sử dụng thì nó sẽ lấy lại các đối tượng đó bằng cách xóa bộ nhớ của chúng và giữ bộ nhớ khả dụng cho các lần cấp phát trong tương lai.
-
Các đối tượng được quản lý tự động lấy nội dung rõ ràng để bắt đầu, do đó, hàm tạo của chúng không phải khởi tạo mọi trường dữ liệu.
-
Nó cũng cung cấp sự an toàn cho bộ nhớ bằng cách đảm bảo rằng một đối tượng không thể sử dụng nội dung của một đối tượng khác.
Điều kiện Garbage Collection
Garbage Collection xảy ra khi một trong các điều kiện sau là đúng.
-
Hệ thống có bộ nhớ vật lý thấp.
-
Bộ nhớ được sử dụng bởi các đối tượng được phân bổ trên đống được quản lý vượt quá ngưỡng chấp nhận được. Ngưỡng này liên tục được điều chỉnh khi quá trình chạy.
-
Phương thức GC.Collect được gọi và trong hầu hết các trường hợp, bạn không cần phải gọi phương thức này vì trình Garbage Collection chạy liên tục. Phương pháp này chủ yếu được sử dụng cho các tình huống và thử nghiệm độc đáo.
Các thế hệ
.NET Garbage Collector có 3 thế hệ và mỗi thế hệ có đống riêng được sử dụng để lưu trữ các đối tượng được phân bổ. Có một nguyên tắc cơ bản là hầu hết các đối tượng đều tồn tại trong thời gian ngắn hoặc tồn tại lâu dài.
Thế Hệ Đầu Tiên (0)
-
Trong Thế hệ 0, các đối tượng được phân bổ đầu tiên.
-
Trong thế hệ này, các đối tượng thường không tồn tại qua thế hệ đầu tiên, vì chúng không còn được sử dụng (ngoài phạm vi) vào thời điểm bộ sưu tập rác tiếp theo diễn ra.
-
Thế hệ 0 được thu thập nhanh chóng vì đống liên kết của nó nhỏ.
Thế hệ thứ hai (1)
-
Trong Thế hệ 1, các đối tượng có không gian cơ hội thứ hai.
-
Các đối tượng tồn tại trong thời gian ngắn nhưng tồn tại trong bộ sưu tập thế hệ 0 (thường dựa trên thời gian trùng hợp) sẽ chuyển sang thế hệ 1.
-
Các bộ sưu tập thế hệ 1 cũng nhanh chóng vì đống liên kết của nó cũng nhỏ.
-
Hai đống đầu tiên vẫn còn nhỏ vì các đối tượng được thu thập hoặc thăng cấp cho đống thế hệ tiếp theo.
Thế hệ thứ ba (2)
-
Trong Thế hệ 2, tất cả các đối tượng dài đều tồn tại và đống của nó có thể tăng lên rất lớn.
-
Các đối tượng trong thế hệ này có thể tồn tại trong một thời gian dài và không có đống thế hệ tiếp theo để thúc đẩy các đối tượng hơn nữa.
-
Garbage Collector có một đống bổ sung dành cho các đối tượng lớn được gọi là Đống đối tượng lớn (LOH).
-
Nó được dành riêng cho các đối tượng từ 85.000 byte trở lên.
-
Các đối tượng lớn không được phân bổ cho các đống thế hệ mà được phân bổ trực tiếp cho LOH
-
Các bộ sưu tập thế hệ 2 và LOH có thể mất thời gian đáng chú ý đối với các chương trình đã chạy trong một thời gian dài hoặc hoạt động trên một lượng lớn dữ liệu.
-
Các chương trình máy chủ lớn được biết là có hàng đống trong 10 GB.
-
GC sử dụng nhiều kỹ thuật khác nhau để giảm lượng thời gian mà nó chặn việc thực thi chương trình.
-
Cách tiếp cận chính là thực hiện càng nhiều công việc Garbage Collection càng tốt trên luồng nền theo cách không can thiệp vào việc thực thi chương trình.
-
GC cũng đưa ra một số cách để các nhà phát triển tác động đến hành vi của nó, điều này có thể khá hữu ích để cải thiện hiệu suất.