+7

Garbage collection - Quản lý bộ nhớ Heap trong JVM

Garbage collection (Quá trình thu gom rác) trong máy ảo Java (JVM) là quá trình xác định và loại bỏ các Object không được sử dụng (unreferenced) khỏi bộ nhớ Heap. Không gian trống này sẽ được cấp phát cho những Object mới. Với các ngôn ngữ như C thì việc giải phóng bộ nhớ được thực hiện một cách thủ công (bằng những lệnh khởi tạo, giải phóng bộ nhớ). Với Java thì việc giải phóng bộ nhớ được thực hiện một cách tự động.

Garbage collector là chương trình chạy nền, nó theo dõi toàn bộ các Object trong bộ nhớ (Heap) và tìm ra những Object nào không được dùng nữa (không có Object nảo reference đến nó). Toàn bộ những Object không có reference sẽ bị xóa.

Quá trình thu gom rác cơ bản thông qua 3 bước sau:

  1. Marking: Là bước đánh dấu những Object còn sử dụng và những Object không còn sử dụng.

Marking.PNG

  1. Normal deleting: Trình Garbage Collector sẽ xóa cá Object không còn sử dụng.

NormalDeletion.PNG

  1. Deletion with Compacting: Sau khi những Object không còn được sử dụng bị xóa, những Object còn được sử dụng sẽ được "gom" lại gần nhau. Điều đó làm tăng hiệu xuất sử dụng bộ nhớ trống để cấp phát cho những Object mới.

DelWithCompacting.PNG

Để thực hiện việc tự động giải phóng các Object khi chúng không được sử dụng thì bộ nhớ Heap được chia thành các phần nhỏ như hình dưới đây.

Heap_model.png

Young Generation Là nơi chứa toàn bộ Object mới được khởi tạo. Khi vùng nhớ Young generation đầy thì garbage collectior là Minor GC hoạt động. Vùng Young generation lại được chia thành 3 vùng nhỏ hơn là Eden và 2 vùng Survivor là S0, S1.

Ban đầu mọi Object mới tạo được chứa ở vùng Eden, khi Eden đầy thì Minor GC chuyển chúng sang vùng S0, S1.

Eden filled.PNG

Minor GC liên tục theo dõi các Object ở S0, S1. Sau "nhiều" chu kỳ quét mà Object vẫn còn được sử dùng thì chúng mới được chuyển sang vùng nhớ Old generation. Old generation được quản lý bởi garbage collectior khác là Major GC.

Move object to Old generation.PNG

Hình trên mô phòng 2 Object được chuyển từ vùng Young generation sang Old generation sau 9 chu kỳ quét của Minor GC. Những ô màu vàng tượng chưng cho những Object đã không còn được sử dụng (unreferenced). Chúng sẽ được xóa khi Minor GC hay Majo GC clear vùng nhớ nó quản lý.

Mô hình vùng nhớ Heap có vùng Perm (Permanent Generation), Perm không phải một phần của Heap. Perm không chứa Object, nó chứa metadata của JVM như các thư viện Java SE, mô tả các class và các method của ứng dụng.

Tài liệu tham khảo:


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí