# หน่วยความจำในจาวามีสองประเภท เรียกว่าสแต็กและฮีปตามลำดับ
สแต็กคือพื้นที่หน่วยความจำของโปรแกรม ดังนั้นประเภทพื้นฐานและการอ้างอิงอ็อบเจ็กต์ทั้งหมดจึงถูกจัดเก็บไว้ในสแต็ก
ฮีปเป็นที่ที่เครื่องเสมือน Java เก็บวัตถุ มันเป็นหน่วยความจำขนาดใหญ่ เมื่อคุณสร้างวัตถุ เครื่องเสมือน Java จะใส่วัตถุลงในฮีปและที่อยู่ของวัตถุที่สร้างขึ้นลงในสแต็ก
ดังนั้นการอ้างอิงถึงประเภทพื้นฐานและออบเจ็กต์จึงถูกจัดเก็บไว้ในสแต็ก
#กลไกการเก็บขยะใน java
เมื่อคุณสร้างอ็อบเจ็กต์ใหม่ Java จะจัดสรรหน่วยความจำที่จำเป็น เมื่อคุณใช้วัตถุเสร็จแล้ว ตัวรวบรวมขยะของ Java จะเรียกคืนหน่วยความจำให้กับคุณ
การรวบรวมขยะจะดำเนินการในพื้นหลังในรูปแบบของเธรด โดยมองหาวัตถุที่ไม่มีการอ้างอิงที่เป็นประโยชน์ เมื่อพบแล้ว วัตถุจะถูกทำลายและหน่วยความจำจะถูกเรียกคืน
การรวบรวมขยะถูกนำมาใช้ระหว่างเครื่องเสมือน Java โดยปกติแล้วจะมีขั้นตอนเดียวกัน ขั้นแรก ตัวรวบรวมขยะจะได้รับสแน็ปช็อตของเธรดที่รันอยู่และคลาสที่โหลดทั้งหมด
จากนั้นออบเจ็กต์ทั้งหมดที่เกี่ยวข้องกับเธรดจะถูกทำเครื่องหมายว่าใช้งานล่าสุด เมื่อมีการทำเครื่องหมายออบเจ็กต์ทั้งหมดที่อาจเกี่ยวข้อง วัตถุที่เหลือที่ไม่ได้ทำเครื่องหมายจะถูกละทิ้ง
เพื่อช่วยเครื่องเสมือน แนวทางปฏิบัติที่ดีในการลบออบเจ็กต์บางอย่างที่ไม่จำเป็นอีกต่อไป ซึ่งสามารถทำได้โดยการตั้งค่าการอ้างอิงเป็นโมฆะ
เช่น:
ข้อความ t = การทดสอบใหม่ ();
t.someAction();
//เสร็จแล้ว.
เสื้อ = โมฆะ;