‫Chào mừng trở lại.
‫Trong video này mình xin nói về bộ thu gom rác và cách C-sharp chăm sóc bộ nhớ.
‫Vì vậy, bộ thu gom rác là một công cụ có sẵn trong nhiều ngôn ngữ lập trình.
‫Và trong một số người trong số họ, nó được thực hiện thủ công và những người khác được thực hiện tự động.
‫Và dot net framework cung cấp khả năng quản lý bộ nhớ tự động, có nghĩa là bạn không phải sử dụng
‫bộ thu gom rác theo cách thủ công như bạn làm trong tất cả các ngôn ngữ lập trình.
‫Vì vậy, các ngôn ngữ lập trình như C hoặc C ++ và những ngôn ngữ khác, chúng có một bộ sưu tập rác thủ công mà bạn phải chạy
‫mọi lúc mọi nơi và bạn phải biết khi nào bạn phải chạy nó.
‫Vì vậy, đó là một cái gì đó được thực hiện tự động trong C cửa hàng.
‫Đó là lý do tại sao nó không phải là một cái gì đó đúng, nhiều người sử dụng rất thường xuyên.
‫Vì vậy, một khi bạn có các chương trình phức tạp hơn và thực sự nâng cao, thì bạn sẽ bắt đầu sử dụng nó mọi lúc, mọi
‫nơi.
‫Nhưng thực sự nó không phải là thứ mà bạn phải sử dụng mọi lúc hoặc thậm chí phải sử dụng mọi lúc trong hầu hết các trường hợp.
‫Vì vậy, đó là lý do tại sao nó không phải là một chủ đề chính, có thể nói như vậy.
‫Được rồi.
‫Vì vậy, giả sử chúng ta có vật thể này được gọi là Dennis và nó thuộc loại người.
‫Vì vậy, tôi đã tạo một lớp được gọi là con người và có nhiều thuộc tính khác nhau, v.v.
‫Vì vậy, cuối cùng, tôi chỉ tạo ra một đối tượng kiểu người, và nó được gọi là Dennis.
‫Và khi làm như vậy, bằng cách sử dụng từ khóa mới này, tôi yêu cầu bộ nhớ vì nó tạo ra một đối tượng trong bộ nhớ của tôi.
‫Vì vậy, C Sharp phân bổ bộ nhớ cho chúng tôi và khuôn khổ sẽ đảm nhận việc lấy lại bộ nhớ để sử dụng trong hệ thống
‫khi các đối tượng không còn được sử dụng nữa.
‫Vì vậy, trường hợp này, tôi đang tạo đối tượng này và sau đó tôi có thể sử dụng nó và tôi có thể sử dụng nó nhiều lần.
‫Nhưng tại một thời điểm, tôi sẽ không sử dụng nó nữa và thậm chí tôi có thể cắt các tham chiếu đến nó.
‫Và sau đó, vâng, trình thu gom rác sẽ dọn dẹp nó vì bộ nhớ này hiện đã bị chặn và trình thu
‫gom rác phải dọn dẹp.
‫Vì vậy, nó phải cung cấp lại bộ nhớ này cho các đối tượng khác.
‫Bây giờ chúng ta hãy nhìn nó từ một góc độ trực quan.
‫Vì vậy, chúng tôi có nhóm bộ nhớ hệ thống này ở phía bên trái và chương trình của chúng tôi ở phía bên phải.
‫Và nhóm bộ nhớ hệ thống có nhiều bộ nhớ, vì vậy chúng ta có thể sử dụng bộ nhớ này cho nhiều chương trình
‫khác nhau.
‫Nhưng bây giờ chúng ta có chương trình của mình để chạy nó, và bây giờ trong chương trình của chúng ta, chúng ta tạo một đối tượng.
‫Bây giờ, đột nhiên chúng ta cần một chút không gian trong bộ nhớ của mình.
‫Được rồi.
‫Vì vậy, có một tham chiếu từ chương trình của chúng tôi tới bộ nhớ nơi lưu trữ đối tượng của chúng tôi.
‫Được rồi.
‫Vì vậy, có một tài liệu tham khảo trực tiếp và chúng tôi có thể sử dụng lại nó và chúng tôi có thể gọi nó từ các điểm khác nhau, v.v.
‫Được rồi.
‫Và sau đó chúng ta có một cái khác và một cái khác.
‫Vì vậy, chúng tôi có nhiều đối tượng khác nhau mà chúng tôi đã tạo.
‫Và mỗi khi chúng ta tạo một đối tượng mới, sẽ có một vùng nhớ được cấp phát trong vùng nhớ và có một tham chiếu
‫từ chương trình của chúng ta tới vùng nhớ đó.
‫Vì vậy, những tài liệu tham khảo là ở đó.
‫Vì vậy, có một tham chiếu từ chương trình của chúng tôi đến nhóm bộ nhớ.
‫Bây giờ tại một thời điểm, tham chiếu có thể bị xóa.
‫Vì vậy, chúng ta có thể xóa tham chiếu bằng cách đặt một biến null hoặc bằng cách đặt đối tượng là null, và sau đó
‫tham chiếu đột ngột biến mất.
‫Bây giờ không có tài liệu tham khảo từ chương trình của chúng tôi để phân bổ bộ nhớ nhỏ này ở đây nữa.
‫Vì vậy, trình thu gom rác của chúng tôi nhận thấy nó và nói, được rồi, không có tài liệu tham khảo, vì vậy
‫phần bộ nhớ nhỏ này không bao giờ được sử dụng, vì vậy chúng ta hãy dọn dẹp nó hoặc hãy phân bổ lại nó hoặc hãy giải phóng
‫cho việc phân bổ khác.
‫Và đó là những gì xảy ra sau đó.
‫Vì vậy, bây giờ chúng ta hãy xem một ví dụ về thời điểm trình thu gom rác sẽ hoạt động.
‫Và tôi có một hàm ở đây được gọi là hàm của tôi, và tôi đang tạo một đối tượng ở đây.
‫Một lần nữa, nó được gọi là Dennis.
‫Và rồi Dennis gọi các phương pháp của anh ấy, hay chúng ta gọi các phương pháp của anh ấy là dạy.
‫Sau đó, chúng tôi đặt tuổi của anh ấy và sau đó chúng tôi gọi một phương pháp khác, già đi, v.v.
‫Nhưng tại một thời điểm, đối tượng Dennis này trong bộ nhớ không được yêu cầu nữa vì lệnh gọi hàm đã
‫kết thúc.
‫Vì vậy hàm kết thúc đối tượng.
‫Dennis vượt ra khỏi phạm vi và không còn tham chiếu đến Dennis nữa vì hàm của tôi là một hàm và chúng
‫ta có đối tượng này nằm trong một hàm, vì vậy phạm vi của nó nằm trong hàm.
‫Vì vậy, một khi cuộc gọi hàm kết thúc, không có tham chiếu trực tiếp đến nó nữa vì chúng ta không thể tham
‫chiếu đến một đối tượng nằm trong một hàm từ bên ngoài hàm này.
‫Đúng.
‫Vì vậy, chúng tôi sẽ cần tạo các trường cho điều đó hoặc thực hiện các cách tiếp cận khác cho việc này.
‫Nhưng cuối cùng, bộ thu dọn rác, dọn dẹp Dennis này và phân bổ lại bộ nhớ này.
‫Và ý tưởng chung ở đây thực sự là đây chỉ là một ví dụ đơn giản.
‫Có rất nhiều tình huống khác mà người thu gom rác sẽ bắt đầu, nhưng đây là thứ mà chúng
‫tôi đã sử dụng.
‫Vì vậy, các khái niệm mà bạn có thể thấy ở đây, chúng tôi đã thấy chúng trong các video hoặc bài giảng khác của khóa học
‫này rồi.
‫Đó là lý do tại sao tôi chọn ví dụ này.
‫Vậy bạn cần biết gì về việc thu gom rác?
‫Chà, bạn không phải gọi người thu gom rác theo cách thủ công mà có thể, vì vậy bạn có thể làm điều đó theo cách thủ công.
‫Trình thu gom rác yêu cầu sức mạnh xử lý, vì vậy nó nằm trên một luồng riêng và rất nhẹ.
‫Nhưng vẫn cần một số sức mạnh xử lý.
‫Mục tiêu của bộ thu gom rác là giải phóng bộ nhớ nhưng không sử dụng quá nhiều sức mạnh xử lý.
‫Vì vậy, nói chung nó sẽ không cần nhiều sức mạnh xử lý, nhưng nó sẽ không được gọi mọi lúc hoặc
‫trình thu gom rác sẽ không chạy mọi lúc để giải phóng bộ nhớ.
‫Nó chỉ chạy khi nó cần thiết hoặc khi nó thấy cần thiết, khi nó nghĩ nó cần thiết.
‫Vì vậy, đó thực sự là một phần khó khăn ở đây.
‫Bộ nhớ không nhất thiết phải được lấy lại ngay lập tức.
‫Có thể mất một chút thời gian để bộ thu gom rác, ngay cả khi bạn gọi nó theo cách thủ công, không cần phải
‫chạy ngay lập tức.
‫Vì vậy, đây là một số điều khó khăn về bộ thu gom rác.
‫Bạn có thể triển khai một phương thức đã hoàn thiện để thực thi mã ngay trước khi một đối tượng được bộ thu gom
‫rác giải phóng khỏi bộ nhớ.
‫Điều này có nghĩa là nếu bạn quyết định chạy một mã cụ thể ngay trước khi một đối tượng được dọn dẹp, vì vậy ngay trước khi bộ thu gom
‫rác đang dọn dẹp nó.
‫Vì vậy, một khi không còn tham chiếu đến nó nữa, thì bạn có thể sử dụng phương thức laser cuối cùng
‫trong lớp này để triển khai chức năng cụ thể mà bạn muốn chúng chạy.
‫Có thể bạn muốn tự dọn dẹp nội dung ngay trước khi trình thu gom rác đến và dọn dẹp đối
‫tượng của bạn hoặc định vị lại bộ nhớ hoặc giải phóng nó vào đối tượng này khỏi bộ nhớ.
‫Được rồi.
‫Khi nào máy thu gom rác chạy?
‫Vâng, khi hệ thống có bộ nhớ vật lý thấp, khi bộ nhớ được cấp phát vượt quá ngưỡng
‫đặt trước, khi phương thức thu thập hoặc thu gom rác được gọi, mặc dù đây là một phương pháp siêu phức
‫tạp.
‫Vì vậy, đây là một cái gì đó đó là.
‫Vâng, rất cụ thể, rất đặc biệt.
‫Nếu bạn muốn biết thêm về nó, bạn nên xem tài liệu về bộ thu gom rác.
‫Nhưng phương pháp thu thập dấu chấm không phải lúc nào cũng được gọi ngay lập tức và nó không trực tiếp làm sạch mọi
‫thứ.
‫Nó giống như bạn đang đưa ra một gợi ý cho công cụ, vì vậy bạn đang nói, được rồi, người thu gom rác.
‫Cá nhân tôi nghĩ rằng đó sẽ là một điểm tốt hoặc một điểm tốt để thu gom rác, nhưng trong một số trường hợp, nó có thể không
‫chấp nhận nó hoặc nó có thể sẽ làm điều đó sau hoặc đại loại như vậy.
‫Có lẽ nó chỉ làm công việc thu gom rác và nó quyết định rằng nó không cần thiết hoặc một cái gì đó tương tự.
‫Vì vậy, nó là một rất khó.
‫Nếu bạn muốn biết thêm về nó, hãy xem tài liệu.
‫Nhưng tôi nghĩ đây là một điểm khởi đầu tốt để hiểu những gì người thu gom rác làm.
‫Và như tôi đã nói, trong hầu hết các trường hợp, bạn sẽ không cần nó vì ngày nay chúng ta có rất nhiều bộ nhớ.
‫Và nếu bạn không bị rò rỉ bộ nhớ lớn trong các chương trình của mình, bạn sẽ không bao giờ gặp phải những vấn đề này.