garbage collection ใน java คืออะไร

garbage collection ใน java คืออะไร

หากกำลังเรียนรู้ภาษา Java หนึ่งในแนวคิดสำคัญที่คุณต้องรู้ให้ชัดก็คือ “Garbage Collection”
แม้มันจะไม่ใช่สิ่งที่คุณต้องเขียนโค้ดควบคุมเอง แต่การเข้าใจมันอย่างลึกซึ้งจะช่วยให้คุณเขียนโค้ดที่มีประสิทธิภาพขึ้นอย่างมาก

Garbage Collection ไม่ได้เกี่ยวอะไรกับ “ขยะจริง ๆ” แต่คือกลไกของ Java Virtual Machine (JVM) ที่ใช้จัดการกับหน่วยความจำอัตโนมัติ ซึ่งเป็นเบื้องหลังสำคัญที่ทำให้ Java เป็นหนึ่งในภาษาโปรแกรมที่ “ปลอดภัยจากปัญหา memory leak” มากที่สุดภาษาหนึ่ง

Garbage Collection คืออะไร?

ในภาษา Java การสร้างวัตถุ (Object) ใหม่จะทำให้ JVM จัดสรรหน่วยความจำใน Heap
แต่เมื่อวัตถุนั้นไม่ถูกใช้งานอีกต่อไป เช่น ไม่มีตัวแปรไหนอ้างถึงแล้ว — มันจะกลายเป็น “ขยะ” ที่ยังอยู่ในความจำโดยเปล่าประโยชน์

Garbage Collection (GC) คือกระบวนการที่ JVM ใช้เพื่อ
“ค้นหาและกำจัดวัตถุที่ไม่มีการใช้งาน เพื่อคืนพื้นที่หน่วยความจำให้ระบบ”
โดยที่นักพัฒนาไม่ต้องเขียนคำสั่งลบด้วยตัวเอง

Java จัดการกับ GC อย่างไร?

Java มีตัวเก็บขยะ (Garbage Collector) ฝังอยู่ใน JVM ซึ่งจะทำงานอัตโนมัติโดยมีหลายอัลกอริทึม เช่น:

  • Serial GC – เหมาะกับแอปพลิเคชันขนาดเล็ก

  • Parallel GC – ทำงานเร็วขึ้นโดยใช้หลายเธรด

  • G1 GC – เน้นการลด pause time ในระบบขนาดใหญ่

  • ZGC / Shenandoah – ใช้ในระบบที่ต้องการ latency ต่ำเป็นพิเศษ

ในแต่ละกรณี JVM จะพยายามทำความสะอาดวัตถุใน heap ที่ไม่ถูกอ้างอิง
การทำงานนี้อาจเกิดขึ้นเมื่อ heap ใกล้เต็ม หรือเกิดขึ้นตามช่วงเวลาที่ระบบกำหนด

วัตถุแบบไหนจะถูกเก็บทิ้ง?

Java จะลบวัตถุก็ต่อเมื่อ ไม่มีการอ้างอิงถึงมันอีกเลย
เช่น

MyObject obj = new MyObject();
obj = null; // ไม่มีตัวแปรใดอ้างอิง MyObject อีกต่อไป
หรือถ้าวัตถุถูกเก็บไว้ใน scope ที่หมดไปแล้ว เช่นภายใน method
เมื่อ method จบ execution วัตถุภายในก็อาจกลายเป็น candidate สำหรับ GC ได้เช่นกัน

สมัครสมาชิก
ทางเข้าเล่น