Bộ thu gom rác trong python
Trong Java, rác (garbage) có nghĩa là một đối tượng không được tham chiếu đến nữa và bộ thu gom rác (Garbage Collector) có nhiệm vụ hủy các đối tượng đó để giải nén bộ nhớ. Show
Người thu gom rác là gì ?Chắc chắn các nhà phát triển đã không ít lần bị "rò rỉ bộ nhớ" hay "hết bộ nhớ", nguyên nhân là do việc quản lý bộ nhớ không tốt. Rất có thể trong Java đã cung cấp một bộ Garbage Collector sẽ tự động dọn dẹp bộ nhớ. Nhờ nó, các nhà phát triển sẽ không cần quan tâm đến việc quản lý và phân phối lại bộ nhớ của chương trình như C/C++ Garbage Collectors (dưới đây sẽ gọi tắt là GC) được định nghĩa là một quá trình tự động thực thi nhiệm vụ quản lý bộ nhớ. Mã Java được dịch sang bytecode rồi chạy trên máy ảo Java hay viết tắt là JVM. Trong quá trình chạy chương trình, các đối tượng được tạo trong vùng nhớ heap, một phần bộ nhớ dành cho chương trình. Sau cùng, sẽ có một số đối tượng mà chương trình không cần sử dụng đến. Các đối tượng này sẽ được thu gom rác truy tìm và xóa bỏ để thu hồi lại dung lượng bộ nhớ. Khác biệt rất nhiều khi chúng ta làm việc với C/C++, công việc quản lý bộ nhớ phải thực hiện "bằng tay" Và nếu hiểu được cách thức mà GC hoạt động như thế nào, thì các thành viên của chương trình sẽ dễ dàng hơn trong quá trình phát triển phần mềm Vì vậy, người thu gom rác hoạt động như thế nào?Đầu tiên chúng ta hãy nhớ lại kiến trúc JVM, trong mô-đun "Run time area" chúng ta có 2 vùng nhớ là vùng nhớ Có nhiều tiến trình gom rác khác nhau nhưng phổ biến nhất Tại vùng nhớ Heap được chia làm 3 vùng nhớ nhỏ hơn, tạm gọi là Thế hệ trẻ, Thế hệ cũ và Thế hệ vĩnh viễn Thế hệ trẻ. được chia thành nhiều vùng nhớ nhỏ hơn là Eden(khởi tạo) và Survivor(sống sót). Các Object vừa được khởi tạo sẽ nằm trong vùng Eden, sau chu kỳ quét đầu tiên nếu Object đó còn tồn tại thì sẽ được chuyển sang vùng Survivor. Tại đây Object được GC theo dõi liên tục, nếu như qua nhiều chu kỳ quét mà Object vẫn còn được sử dụng thì lúc này Object sẽ được chuyển sang vùng nhớ thứ hai thế hệ cũ. là nơi chứa những Object tòn đủ "lâu", còn "lâu" như thế nào thì lại thuộc về tùy thuật toán của từng bộ GC thế hệ vĩnh viễn. không chứa đối tượng mà đây là nơi chứa các siêu dữ liệu của JVM như các lớp và phương thức của ứng dụng. Do that if the class and phương pháp không còn được sử dụng nữa thì GC sẽ coi chúng là "rác" và dọn dẹp nó Ưu và nhược điểmTrong C++, sau khi khởi tạo một Đối tượng, các thành viên lập trình phải chủ động xóa vùng nhớ của Đối tượng bằng câu lệnh pauseViệc hiểu rõ ưu và nhược điểm của từng ngôn ngữ sẽ giúp bạn lựa chọn ngôn ngữ thích hợp để phát triển ứng dụng, vì suy cho cùng ngôn ngữ cũng chỉ là công cụ, hiệu quả sử dụng hay không phụ thuộc rất nhiều vào con người Garbage Collection là kỹ thuật được sử dụng trong Java để phân bổ hoặc loại bỏ các đối tượng không thể truy cập và bộ nhớ không sử dụng được. Ngay từ cái tên, chúng ta có thể hiểu rằng Garbage Collection liên quan đến việc theo dõi và xóa rác khỏi vùng nhớ Tuy nhiên, trên thực tế, Garbage Collection theo dõi từng đối tượng có sẵn trong JVM không gian heap và loại bỏ những đối tượng không sử dụng Chúng ta biết rằng tất cả các đối tượng mà chúng ta tạo động đều được cấp phát trong bộ nhớ heap của ứng dụng. Thông thường, lập trình viên có nhiệm vụ vừa tạo vừa xóa các đối tượng trong chương trình, nhưng lập trình viên thường bỏ qua việc xóa các đối tượng. Điều này tạo ra vấn đề OutOfMemoryErrors không đủ bộ nhớ vì không xóa các đối tượng không mong muốn Trong Java, lập trình viên không cần phải lo lắng về vấn đề giải phóng bộ nhớ của các đối tượng không sử dụng hoặc không mong muốn này, vì hệ thống Garbage Collection luôn chạy ở chế độ nền và mục đích chính của nó là giải phóng Về cơ bản, Garbage Collection trong Java là quá trình theo dõi tất cả các đối tượng vẫn còn được sử dụng và đánh dấu phần còn lại của chúng là rác. Quá trình Gom rác trong Java được coi là một lược đồ quản lý bộ nhớ tự động do người lập trình không xác định được vị trí của các đối tượng một cách rõ ràng. Tập hợp rác trong Java chạy trên các luồng có mức độ ưu tiên thấp hơn Việc phát triển khai báo Garbage Collection có trong JVM (Máy ảo Java). Mỗi JVM đều có thể thực hiện Garbage Collection. But only have a request; . Oracle's HotSpot là một trong những JVM phổ biến nhất cung cấp một tập hợp các tùy chọn Garbage Collection mạnh mẽ và hoàn thiện Đối tượng vòng đời trong JavaCác đối tượng vòng đời trong Java có thể được chia thành 3 giai đoạn 1. Tạo đối tượngNói chung, để tạo một đối tượng, chúng tôi sử dụng một từ khóa mới. Ví dụ MyClass obj = new MyClass() ; Chúng ta đã tạo các đối tượng obj của lớp MyClass. Khi chúng ta tạo đối tượng, một lượng bộ nhớ cụ thể sẽ được cấp phát để lưu trữ đối tượng đó. Bộ nhớ được cấp phát cho các đối tượng có thể thay đổi tùy chọn theo kiến trúc và JVM 2. Đối tượng sử dụngTrong giai đoạn này, các đối tượng được sử dụng bởi các đối tượng khác của ứng dụng trong Java. Trong quá trình sử dụng, các đối tượng nằm trong bộ nhớ và có thể tham chiếu hoặc chứa tham chiếu đến các đối tượng khác 3. Sự kiện hủy đối tượngHệ thống Garbage Collection giám sát các đối tượng và duy trì số lượng tham chiếu đến từng đối tượng. Không cần các đối tượng như vậy trong chương trình của chúng ta nếu không có tham chiếu đến đối tượng này, vì vậy bộ phận bổ sung bộ nhớ không sử dụng được điều này là điều hoàn hảo Đối tượng không thể truy cập trong JavaKhi một đối tượng không chứa bất kỳ tham chiếu “có thể truy cập” đối tượng nào với nó, thì chúng ta gọi nó là đối tượng không thể truy cập. Các đối tượng này cũng có thể được gọi là đối tượng không tham chiếu Ví dụ về các đối tượng không thể truy cập.
Tính đủ điều kiện để Garbage Collection trong JavaMột đối tượng có đủ điều kiện để Garbage Collection trong Java nếu và chỉ khi nó không thể truy cập được. In the program on, after thebáo d is null; Tính đủ điều kiện của đối tượngMặc dù Java có tính năng Garbage Collection tự động, nhưng một đối tượng phải được thực hiện theo cách thủ công. Có nhiều cách khác nhau để biết đối tượng dữ liệu có đủ điều kiện cho Bộ sưu tập rác trong Java hay không Nói chung, có bốn cách trong Java để làm cho một đối tượng đủ điều kiện để thu gom rác
Cách yêu cầu JVM chạy Garbage CollectionNgay cả khi chúng tôi làm cho một đối tượng đủ điều kiện để Garbage Collection trong Java, nó có thể đủ điều kiện hoặc không đủ điều kiện để Máy ảo Java (JVM) bị hủy bỏ. Vì vậy, có một số cách để yêu cầu JVM hủy đối tượng này và thực hiện Garbage CollectionCó hai cách để yêu cầu JVM để thu thập Rác trong Java là
Thuật toán thu gom rác trong JavaThuật toán Garbage Collection trong Java giúp loại bỏ các đối tượng không được tham chiếu hoặc không thể truy cập. Các thuật toán này luôn chạy ở chế độ nền. Có một số loại bộ thuật toán Garbage Collection khác nhau trong Java chạy ở chế độ nền. Và trong số đó, một trong những thuật toán là thuật toán Đánh dấu và Quét Các thuật toán đánh dấu và quétThuật toán Đánh dấu và Quét là một thuật toán cơ bản và cấm đầu để Thu gom rác trong Java. Thuật toán này về cơ bản thực hiện hai chức năng chính. đánh dấu và quét. Thứ nhất, nó sẽ theo dõi và phát hiện các đối tượng không thể truy cập và thứ hai, nó sẽ giải nén các đối tượng này khỏi vùng nhớ heap để lập trình viên có thể sử dụng lại 1. Đánh dấu pha - Đánh dấu các đối tượng sốngĐây là giai đoạn đầu tiên của thuật toán, trong đó có việc phát hiện tất cả các đối tượng vẫn còn sống. Đây là giai đoạn mà bộ Garbage Collection xác định phần nào của bộ nhớ đang được sử dụng và phần nào không được sử dụng Trong giai đoạn này khi điều kiện được thực hiện, kiểm tra bit của nó được đặt thành 0 hoặc sai. Chúng tôi đặt bit được đánh dấu thành 1 hoặc true cho tất cả các đối tượng có thể truy cập Ở đây chúng ta có thể coi mỗi đối tượng là một nút và sau đó chúng ta truy cập tất cả các đối tượng hoặc nút có thể truy cập được từ đối tượng / nút này và nó lặp lại cho đến khi chúng ta đã truy cập
Pha đánh giá thuật toán
>>> Đọc thêm. Constructor Chaining trong Java - Tất tần tật về Constructor Chaining 2. Giai đoạn quét - Loại bỏ các vật chếtThuật toán pha quét “xóa” tất cả các đối tượng không thể truy cập hoặc không thể truy cập được, nó giải nén vùng nhớ được lưu trữ cho tất cả các đối tượng không thể truy cập. Mỗi mục có giá trị kiểm tra được đặt thành sai sẽ bị xóa khỏi bộ nhớ ngăn xếp, đối với mọi đối tượng có thể truy cập khác, chúng tôi đặt giá trị của bit bị đóng thành sai Hiện tại, kiểm tra một chút để tất cả các đối tượng có thể truy cập được đặt thành false Thu thập số liệu thuật toán
Thuật toán 'Mark and Sweep' còn được gọi là bộ thu gom rác theo dõi vì thuật toán này được sử dụng để theo dõi các đối tượng. Ví dụ
Ưu điểm của thuật toán đánh dấu và quét
Nhược điểm của thuật toán đánh dấu và quét
>>> Đọc thêm. Hướng dẫn JDBC trong Java - Kiến trúc, thành phần và cách làm việc Ưu điểm và nhược điểm của Garbage Collection trong JavaƯu điểm của công việc Thu gom rác
Nhược điểm của công việc Thu gom rác
Kết luận. Garbage Collection trong Java rất hữu ích để ngăn chặn rò rỉ bộ nhớ và sử dụng không gian. Trong hướng dẫn Java này, chúng tôi đã tìm hiểu về Garbage Collection trong Java và cách hoạt động của nó. Chúng ta đã thảo luận về các điều khoản quan trọng liên quan đến Java Garbage Collection và các thuật toán Garbage Collection. Có bốn loại Trình Java Garbage Collection mà chúng ta đã tìm hiểu trong bài viết này. Chúng tôi đã thảo luận về thuật toán Java Mark và Sweep cùng với những điểm ưu và nhược điểm của nó. Chúng ta cũng đã xem xét những ưu điểm và nhược điểm của Bộ sưu tập rác trong Java. Hy vọng bạn đã biết và Bộ sưu tập rác và có thể áp dụng nó trong chương trình của mình. Tìm hiểu thêm về Java và các ngôn ngữ lập trình khác thông qua các khóa học lập trình tại Viện công nghệ thông tin T3H |