Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีเรียก Garbage Collection (GC) โดยตรงใน Java

เมื่อไม่มีอ้างอิงไปยังออบเจ็กต์อีกต่อไป ออบเจ็กต์จะถูก finalize และเมื่อ Garbage Collection เริ่มทำงาน ออบเจ็กต์เหล่านี้จะถูกเก็บรวบรวม ซึ่งทำงานอัตโนมัติโดย JVM เราสามารถเรียก GC โดยตรงได้ แต่ ไม่รับประกันว่า GC จะทำงานทันที

2 วิธีเรียก GC โดยตรง

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

เมธอด java.lang.Runtime.freeMemory() คืนค่าหน่วยความจำว่างใน JVM การเรียก gc() อาจทำให้ค่าที่ freeMemory คืนเพิ่มขึ้น

ตัวอย่างโค้ด

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());
    }
}

ผลลัพธ์ตัวอย่าง

15648632
13273472
15970072

คำอธิบาย: หน่วยความจำลดลงหลังสร้างออบเจ็กต์มาก แล้วเพิ่มขึ้นหลังเรียก gc() (แต่ไม่รับประกันว่าจะเกิดขึ้นทุกครั้ง)

ข้อสังเกตสำคัญ

  • ไม่ควรพึ่งพาการเรียก gc() โดยตรงในโปรดักชัน
  • JVM จะตัดสินใจเองว่าจะรัน GC เมื่อใด
  • ใช้ -Xms และ -Xmx เพื่อตั้งค่า heap size แทน