NET Core - Mô-đun

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.

  • 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à thu gom rác .

Ưu điểm của việc Garbage Collection

Thu gom rác 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

Thu gom rác 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 thu gom rác 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 thu gom rác 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.

NET Core – Thực thi mã

Trong chương này, chúng ta sẽ tìm hiểu quá trình thực thi của .NET Core và so sánh nó với .NET Framework. Quá trình thực hiện được quản lý bao gồm các bước sau.

  • Lựa chọn trình biên dịch
  • Biên dịch mã của bạn thành MSIL
  • Biên dịch MSIL thành mã gốc
  • Mã chạy
netcore mã tực thi

Chn mt trình biên dch

  • Nó là một môi trường thực thi đa ngôn ngữ, thời gian chạy hỗ trợ nhiều loại dữ liệu và tính năng ngôn ngữ.
  • Để có được những lợi ích do thời gian chạy ngôn ngữ chung cung cấp, bạn phải sử dụng một hoặc nhiều trình biên dịch ngôn ngữ nhắm mục tiêu thời gian chạy.

Biên dch mã ca bn thành MSIL

  • Quá trình biên dịch sẽ dịch mã nguồn của bạn sang Ngôn ngữ Trung cấp của Microsoft (MSIL) và tạo siêu dữ liệu cần thiết.
  • Siêu dữ liệu mô tả các loại trong mã của bạn, bao gồm định nghĩa của từng loại, chữ ký của từng thành viên của loại, các thành viên mà mã của bạn tham chiếu và dữ liệu khác mà bộ thực thi sử dụng khi thực thi.
  • Bộ thực thi định vị và trích xuất siêu dữ liệu từ tệp cũng như từ các thư viện lớp khung (FCL) nếu cần trong quá trình thực thi.

Biên dch MSIL thành mã gc

  • Tại thời điểm thực thi, trình biên dịch just-in-time (JIT) sẽ dịch MSIL thành mã gốc.
  • Trong quá trình biên dịch này, mã phải vượt qua quy trình xác minh kiểm tra MSIL và siêu dữ liệu để tìm hiểu xem mã có thể được xác định là loại an toàn hay không.

Mã chy

  • Thời gian chạy ngôn ngữ chung cung cấp cơ sở hạ tầng cho phép thực thi diễn ra và các dịch vụ có thể được sử dụng trong quá trình thực thi.
  • Trong quá trình thực thi, mã được quản lý nhận các dịch vụ như thu gom rác, bảo mật, khả năng tương tác với mã không được quản lý, hỗ trợ gỡ lỗi ngôn ngữ chéo cũng như hỗ trợ lập phiên bản và triển khai nâng cao.

Quy trình thc thi mã .NET Core

Bây giờ, hãy liên hệ cách mã thực thi với .NET Core so với .NET Framework. Trong .NET Core, có nhiều sự thay thế các thành phần này là một phần của .NET Framework.

Quy trình thực thi mã .NET Core
  • Trong .NET Core giờ đây chúng tôi có một loạt trình biên dịch mới, chẳng hạn như chúng tôi có Roslyn cho C# và VB.
  • Bạn cũng có thể sử dụng trình biên dịch F# 4.1 mới nếu muốn sử dụng F# với .NET Core.
  • Trên thực tế, những công cụ này là khác nhau và chúng tôi cũng có thể sử dụng Roslyn với .NET Framework nếu chúng tôi đang sử dụng C# 6 trở lên, vì trình biên dịch C# chỉ có thể hỗ trợ tối đa C# 5.
  • Trong .NET Core, chúng tôi không có thư viện lớp khung (FCL), vì vậy một bộ thư viện khác được sử dụng và giờ chúng tôi có CoreFx.
  • CoreFx là sự triển khai lại các thư viện lớp cho .NET Core.
  • Chúng tôi cũng có thời gian chạy mới với .NET Core được gọi là CoreCLR và tận dụng Trình biên dịch JIT.
  • Bây giờ câu hỏi đặt ra là tại sao chúng tôi triển khai lại tất cả các thành phần này mà chúng tôi đã có trong .NET framework.
  • Vì vậy, câu trả lời cũng giống như lý do tại sao Microsoft triển khai .NET Core.

NET Core – Mô-đun (xem thêm)

Để lại một bình luận