Skip to content

การจัดการ Memory และ Garbage Collection เบื้องหลังโค้ด

Sharing is caring!

การจัดการ Memory และ Garbage Collection เบื้องหลังโค้ด

Memory Management

ทุกครั้งที่เราเขียนโค้ด ไม่ว่าจะเป็น Java, Python, JavaScript หรือภาษาอื่น ๆ — เบื้องหลังมีระบบที่ช่วยจัดการหน่วยความจำ (Memory Management) ให้เราอัตโนมัติ โดยเฉพาะการลบสิ่งที่ไม่ใช้งานแล้วออกจากหน่วยความจำ หรือที่เรียกว่า Garbage Collection (GC)

Memory ทำงานอย่างไร?

หน่วยความจำแบ่งออกเป็น 2 ส่วนหลัก:

  • Stack: สำหรับเก็บค่าที่มีอายุสั้น เช่น local variables ในฟังก์ชัน
  • Heap: สำหรับเก็บ object หรือข้อมูลที่ใช้ระยะยาว เช่น instance ของคลาส

Garbage Collection คืออะไร?

GC คือกระบวนการตรวจจับและลบ object ที่ไม่ได้ใช้งานออกจาก heap memory โดยอัตโนมัติ เพื่อป้องกัน memory leak และทำให้โปรแกรมไม่ใช้ memory เกินความจำเป็น

ตัวอย่าง: Java

MyObject obj = new MyObject();
obj = null; // ตอนนี้ object เดิมไม่มีใครอ้างถึง GC จะลบให้เอง

GC ทำงานอย่างไร?

GC จะเริ่มจาก root reference เช่นตัวแปรที่อยู่ใน stack แล้วเดินตาม reference ไปยัง object ต่าง ๆ หาก object ไหนไม่สามารถเดินไปถึงได้ จะถือว่าเป็น “ขยะ” และถูกเก็บออกไป

ภาษาไหนจัดการให้บ้าง?

  • มี GC: Java, C#, Python, JavaScript
  • ไม่มี GC: C, C++ (นักพัฒนาต้องจัดการ memory เอง)

ข้อดีของ GC

  • ลดภาระนักพัฒนาในการจัดการ memory
  • ลดโอกาสเกิด crash จาก memory leak หรือ pointer ผิด

ข้อเสียของ GC

  • อาจมีการหยุดชั่วคราว (GC Pause)
  • ไม่เหมาะกับระบบ real-time ที่ต้องการความเร็วคงที่

สรุป

การเข้าใจการจัดการ memory และ GC ช่วยให้เขียนโค้ดได้ดีขึ้น ปรับปรุงประสิทธิภาพ และลดบั๊กในระบบ แม้ว่า GC จะทำงานอัตโนมัติ แต่เราควรระวังเรื่อง object ที่อ้างอิงข้ามกันมากเกินไป เพื่อป้องกัน memory leak แบบไม่ตั้งใจ

ภาพประกอบจาก: Unsplash

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *