การจัดการหน่วยความจำใน JavaScript เข้าใจกลไก Garbage Collection และ WeakMap
ข่าวสาร | .., 7 พฤศจิกายน 2568
การจัดการหน่วยความจำใน JavaScript เข้าใจกลไก Garbage Collection และ WeakMap
การจัดการหน่วยความจำคืออะไร
เมื่อเราเขียนโปรแกรมด้วย JavaScript โปรแกรมจะต้องใช้หน่วยความจำในการเก็บข้อมูล ตัวแปร หรืออ็อบเจ็กต์ต่างๆ การจัดการหน่วยความจำ (Memory Management) คือกระบวนการที่คอมพิวเตอร์จัดสรรพื้นที่หน่วยความจำให้กับข้อมูลเหล่านั้น และคืนหน่วยความจำกลับเมื่อไม่จำเป็นต้องใช้งานอีกต่อไป เพื่อให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพและไม่สิ้นเปลืองทรัพยากร
วงจรของหน่วยความจำใน JavaScript
- การจัดสรรหน่วยความจำ (Allocation): เมื่อเราสร้างตัวแปรหรืออ็อบเจ็กต์ใหม่ เช่น
let user = {name: "Topvery"};ระบบจะจองพื้นที่หน่วยความจำอัตโนมัติ - การใช้งาน (Usage): การอ่านหรือเขียนค่าลงในตัวแปร เช่น
user.name - การคืนหน่วยความจำ (Release): เมื่อค่าหรืออ็อบเจ็กต์ไม่ถูกใช้งานอีกต่อไป ระบบจะเก็บกวาดออกโดยอัตโนมัติ
Garbage Collection คืออะไร
Garbage Collection (GC) คือกระบวนการอัตโนมัติที่ระบบจะตรวจจับว่า “อ็อบเจ็กต์ใดไม่ถูกอ้างถึงอีกต่อไป” แล้วจึงลบออกจากหน่วยความจำเพื่อลดการรั่วของข้อมูลหรือหน่วยความจำที่ไม่ได้ใช้งาน โดยหลักการคือถ้าไม่มีตัวแปรใดเข้าถึงอ็อบเจ็กต์นั้นได้ มันจะถูกลบออกจากระบบในที่สุด
อัลกอริทึมที่นิยมใช้ใน JavaScript คือ Mark-and-Sweep โดยเริ่มจาก root object เช่น window หรือ global แล้วทำเครื่องหมาย (mark) วัตถุที่สามารถเข้าถึงได้ ส่วนวัตถุที่ไม่มีการอ้างอิงจะถูก “กวาดทิ้ง (sweep)” ออกจากหน่วยความจำ
WeakMap และ WeakSet
WeakMap และ WeakSet เป็นโครงสร้างข้อมูลที่ช่วยให้การจัดการหน่วยความจำดีขึ้น เพราะคีย์ที่เก็บอยู่ใน WeakMap หรือค่าที่อยู่ใน WeakSet จะไม่ถูกป้องกันจากการถูกลบโดย GC เมื่อไม่มีการอ้างอิงถึงอีกต่อไป ซึ่งเหมาะสำหรับเก็บข้อมูลที่ไม่ต้องการอายุยาวในหน่วยความจำ เช่น cache หรือ temporary data
WeakRef และ FinalizationRegistry
WeakRef ช่วยให้นักพัฒนาสามารถเข้าถึงอ็อบเจ็กต์ได้ชั่วคราว โดยไม่รบกวนการทำงานของ GC ซึ่งต่างจากการเก็บอ้างอิงแบบปกติ ส่วน FinalizationRegistry จะช่วยให้เราทราบเมื่ออ็อบเจ็กต์ถูกเก็บกวาดออกไปจากหน่วยความจำ เหมาะสำหรับงานที่ต้องทำความสะอาดทรัพยากร เช่น ปิดไฟล์หรือเคลียร์ข้อมูล cache
สรุป
แม้ว่า JavaScript จะจัดการหน่วยความจำให้อัตโนมัติ แต่การเข้าใจหลักการทำงานของระบบนี้จะช่วยให้นักพัฒนาสามารถเขียนโค้ดที่ประสิทธิภาพสูงขึ้น ป้องกันหน่วยความจำรั่ว และเข้าใจพฤติกรรมของ Garbage Collector ได้อย่างลึกซึ้งมากขึ้น โดยเฉพาะในแอปพลิเคชันขนาดใหญ่ที่ต้องการความเสถียรสูง