Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách gọi Garbage Collection (GC) tường minh trong Java

Khi không còn tham chiếu nào đến một đối tượng, đối tượng đó được hoàn thiện (finalized) và khi Garbage Collection chạy, các đối tượng đã hoàn thiện sẽ được thu gom – điều này diễn ra tự động bởi JVM. Chúng ta có thể gọi GC trực tiếp nhưng không đảm bảo GC sẽ chạy ngay lập tức.

Có hai cách gọi Garbage Collection tường minh:

  • System.gc()
  • Runtime.gc()

Phương thức java.lang.Runtime.freeMemory() trả về lượng bộ nhớ trống trong JVM. Việc gọi gc() có thể làm tăng giá trị trả về của freeMemory.

Ví dụ minh họa

public class GarbageCollectionTest { 
    public static void main(String args[]) { 
        System.out.println(Runtime.getRuntime().freeMemory()); 
        for (int i = 0; i <= 100000; i++) { 
            Double d = new Double(300); 
        } 
        System.out.println(Runtime.getRuntime().freeMemory()); 
        System.gc(); 
        System.out.println(Runtime.getRuntime().freeMemory()); 
    } 
}

Kết quả đầu ra

15648632 
13273472 
15970072

Giải thích: Bộ nhớ trống ban đầu ~15.6MB. Sau khi tạo 100.000 đối tượng Double, bộ nhớ giảm xuống ~13.3MB. Sau khi gọi System.gc(), bộ nhớ trống tăng lên ~15.9MB (đối tượng Double không còn được tham chiếu đã được thu gom).

Lưu ý quan trọng: Việc gọi System.gc() hoặc Runtime.gc() chỉ là gợi ý cho JVM. JVM có thể bỏ qua yêu cầu này. Không nên phụ thuộc vào việc gọi GC tường minh trong ứng dụng production.