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

garbage collection

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


Garbage Collection คืออะไร?

Garbage Collection (GC) คือ กระบวนการที่ JVM (Java Virtual Machine) ใช้ในการจัดการหน่วยความจำ โดยทำการลบหรือเคลียร์วัตถุ (object) ที่ไม่ได้ใช้งานแล้วออกจากหน่วยความจำ heap โดยอัตโนมัติ เพื่อป้องกันปัญหาหน่วยความจำรั่ว (memory leak) และเพิ่มประสิทธิภาพการทำงานของแอปพลิเคชัน


ทำไม Java ต้องมี Garbage Collection?

ในภาษาอย่าง C หรือ C++ โปรแกรมเมอร์ต้องจัดการหน่วยความจำเองผ่าน malloc() และ free() ซึ่งหากทำผิดพลาดอาจทำให้เกิดข้อผิดพลาดร้ายแรง เช่น crash หรือ memory leak

แต่ Java ออกแบบมาเพื่อ ลดภาระของนักพัฒนา และเพิ่มความปลอดภัยโดยให้ JVM จัดการเรื่องเหล่านี้แทน ด้วยการทำ Garbage Collection โดยอัตโนมัติ


หลักการทำงานของ Garbage Collector

  1. สร้างวัตถุ (Object Creation)
    เมื่อสร้าง object ใหม่ เช่น new Student(), JVM จะเก็บ object นี้ไว้ใน heap memory

  2. ตรวจสอบการอ้างอิง (Reference Tracking)
    JVM จะคอยเช็กว่า object ใดไม่มีตัวแปรหรือ object อื่นใดอ้างอิงถึงอีกแล้ว

  3. กำจัดขยะ (Collect Garbage)
    วัตถุที่ไม่มีการอ้างอิงอีกต่อไปจะถูกจัดว่าเป็น “garbage” และสามารถถูกลบทิ้งได้

  4. คืนพื้นที่หน่วยความจำ
    เมื่อ object ถูกเก็บกวาดออกไป JVM จะคืนพื้นที่นั้นให้ระบบเพื่อใช้ใน object ใหม่ต่อไป


ตัวอย่างง่าย ๆ

public class Example {
public static void main(String[] args) {
String a = new String("Hello");
a = null; // Object "Hello" ไม่มีใครอ้างอิงแล้ว
System.gc(); // เรียก GC โดยตรง (ไม่บังคับ)
}
}

ในตัวอย่างด้านบน object "Hello" จะกลายเป็น garbage ทันทีที่ a = null; และอาจถูกเก็บกวาดโดย Garbage Collector ในภายหลัง


ประเภทของ Garbage Collector ใน Java

Java มี GC หลายแบบให้เลือกใช้ โดยแต่ละแบบมีข้อดีข้อเสียต่างกัน เช่น:

  • Serial GC – เหมาะกับแอปขนาดเล็ก ใช้ใน JVM แบบ single-thread

  • Parallel GC – ใช้หลาย thread ทำ GC เหมาะกับแอปที่เน้น throughput

  • G1 GC – แยก heap ออกเป็นหลาย region ลดเวลา pause เหมาะกับแอปที่ต้องการ latency ต่ำ

  • ZGC / Shenandoah – เป็น low-latency GC ที่ทำงานเร็วมาก เหมาะกับระบบ real-time


ข้อควรรู้เกี่ยวกับ GC

  • การเรียก System.gc() เป็นเพียงคำแนะนำ JVM อาจไม่ทำตามทันที

  • Object ที่ยังมีการอ้างอิงอยู่จะไม่ถูกลบทิ้ง

  • การทำ GC มีค่าใช้จ่าย (ใช้ CPU) ควรออกแบบระบบให้ใช้หน่วยความจำอย่างมีประสิทธิภาพ


สรุป

Garbage Collection คือฟีเจอร์สำคัญของ Java ที่ช่วยจัดการหน่วยความจำโดยอัตโนมัติ ทำให้การพัฒนาโปรแกรมง่ายขึ้น ปลอดภัยมากขึ้น และลดความเสี่ยงจากการจัดการหน่วยความจำผิดพลาด แม้ว่า GC จะช่วยลดภาระของนักพัฒนา แต่การเข้าใจหลักการทำงานของมัน จะช่วยให้สามารถเขียนโค้ดที่มีประสิทธิภาพยิ่งขึ้นได้