# การจัดการหน่วยความจำใน JavaScript เข้าใจกลไก Garbage Collection และ WeakMap

> บทความนี้อธิบายการทำงานของระบบจัดการหน่วยความจำใน JavaScript ตั้งแต่การจัดสรร การใช้งาน ไปจนถึงการคืนหน่วยความจำ รวมถึงโครงสร้างข้อมูล WeakMap และ WeakRef ที่ช่วยเพิ่มประสิทธิภาพในการทำงานของโปรแกรม

Full URL: https://www.topvery.com/blog/article.การจัดการหน่วยความจำในJavaScriptเข้าใจกลไกGarbageCollectionและWeakMap.BLO251107191805.ข่าวสาร
Base URL: https://www.topvery.com/

---

การจัดการหน่วยความจำใน JavaScript เข้าใจกลไก Garbage Collection และ WeakMap

## การจัดการหน่วยความจำคืออะไร

เมื่อเราเขียนโปรแกรมด้วย JavaScript โปรแกรมจะต้องใช้หน่วยความจำในการเก็บข้อมูล ตัวแปร หรืออ็อบเจ็กต์ต่างๆ การจัดการหน่วยความจำ (Memory Management) คือกระบวนการที่คอมพิวเตอร์จัดสรรพื้นที่หน่วยความจำให้กับข้อมูลเหล่านั้น และคืนหน่วยความจำกลับเมื่อไม่จำเป็นต้องใช้งานอีกต่อไป เพื่อให้โปรแกรมทำงานได้อย่างมีประสิทธิภาพและไม่สิ้นเปลืองทรัพยากร

## วงจรของหน่วยความจำใน JavaScript

* **การจัดสรรหน่วยความจำ (Allocation):** เมื่อเราสร้างตัวแปรหรืออ็อบเจ็กต์ใหม่ เช่น let user = {name: "Topvery"}; ระบบจะจองพื้นที่หน่วยความจำอัตโนมัติ
* **การใช้งาน (Usage):** การอ่านหรือเขียนค่าลงในตัวแปร เช่น user.name
* **การคืนหน่วยความจำ (Release):** เมื่อค่าหรืออ็อบเจ็กต์ไม่ถูกใช้งานอีกต่อไป ระบบจะเก็บกวาดออกโดยอัตโนมัติ
## Garbage Collection คืออะไร

[Garbage Collection](https://www.topvery.com/*) (GC) คือกระบวนการอัตโนมัติที่ระบบจะตรวจจับว่า “อ็อบเจ็กต์ใดไม่ถูกอ้างถึงอีกต่อไป” แล้วจึงลบออกจากหน่วยความจำเพื่อลดการรั่วของข้อมูลหรือหน่วยความจำที่ไม่ได้ใช้งาน โดยหลักการคือถ้าไม่มีตัวแปรใดเข้าถึงอ็อบเจ็กต์นั้นได้ มันจะถูกลบออกจากระบบในที่สุด

อัลกอริทึมที่นิยมใช้ใน JavaScript คือ **Mark-and-Sweep** โดยเริ่มจาก root object เช่น window หรือ global แล้วทำเครื่องหมาย (mark) วัตถุที่สามารถเข้าถึงได้ ส่วนวัตถุที่ไม่มีการอ้างอิงจะถูก “กวาดทิ้ง (sweep)” ออกจากหน่วยความจำ

## WeakMap และ WeakSet

[WeakMap](https://www.topvery.com/*) และ [WeakSet](https://www.topvery.com/*) เป็นโครงสร้างข้อมูลที่ช่วยให้การจัดการหน่วยความจำดีขึ้น เพราะคีย์ที่เก็บอยู่ใน WeakMap หรือค่าที่อยู่ใน WeakSet จะไม่ถูกป้องกันจากการถูกลบโดย GC เมื่อไม่มีการอ้างอิงถึงอีกต่อไป ซึ่งเหมาะสำหรับเก็บข้อมูลที่ไม่ต้องการอายุยาวในหน่วยความจำ เช่น cache หรือ temporary data

## WeakRef และ FinalizationRegistry

[WeakRef](https://www.topvery.com/*) ช่วยให้นักพัฒนาสามารถเข้าถึงอ็อบเจ็กต์ได้ชั่วคราว โดยไม่รบกวนการทำงานของ GC ซึ่งต่างจากการเก็บอ้างอิงแบบปกติ ส่วน [FinalizationRegistry](https://www.topvery.com/*) จะช่วยให้เราทราบเมื่ออ็อบเจ็กต์ถูกเก็บกวาดออกไปจากหน่วยความจำ เหมาะสำหรับงานที่ต้องทำความสะอาดทรัพยากร เช่น ปิดไฟล์หรือเคลียร์ข้อมูล cache

## สรุป

แม้ว่า [JavaScript](https://www.topvery.com/*) จะจัดการหน่วยความจำให้อัตโนมัติ แต่การเข้าใจหลักการทำงานของระบบนี้จะช่วยให้นักพัฒนาสามารถเขียนโค้ดที่ประสิทธิภาพสูงขึ้น ป้องกันหน่วยความจำรั่ว และเข้าใจพฤติกรรมของ Garbage Collector ได้อย่างลึกซึ้งมากขึ้น โดยเฉพาะในแอปพลิเคชันขนาดใหญ่ที่ต้องการความเสถียรสูง