Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

ความแตกต่างระหว่างหน่วยความจำ Stack และ Heap ใน Java


JVM ได้แบ่งพื้นที่หน่วยความจำระหว่างสองส่วนคือ Stack และอีกส่วนหนึ่งคือ Heap space พื้นที่สแต็กส่วนใหญ่จะใช้สำหรับจัดเก็บลำดับการดำเนินการเมธอดและตัวแปรโลคัล

สแต็คบล็อกที่เก็บไว้เสมอในลำดับ LIFO ในขณะที่หน่วยความจำฮีปใช้การจัดสรรแบบไดนามิกสำหรับการจัดสรรและจัดสรรบล็อกหน่วยความจำใหม่

หน่วยความจำที่จัดสรรให้กับฮีปจะคงอยู่จนกว่าจะเกิดเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้ :

  • โปรแกรมสิ้นสุด
  • ไม่มีหน่วยความจำ

ในทางตรงกันข้าม หน่วยความจำที่จัดสรรให้กับสแต็กจะคงอยู่จนกว่าฟังก์ชันจะส่งคืน ด้านล่างนี้คือข้อแตกต่าง

ซีเนียร์ เลขที่ คีย์ กอง Heap Memory
1
พื้นฐาน
หน่วยความจำสแต็กใช้เพื่อจัดเก็บรายการที่มีอายุสั้นมาก เช่น ตัวแปรในเครื่อง ตัวแปรอ้างอิงของอ็อบเจ็กต์
หน่วยความจำฮีปถูกจัดสรรเพื่อจัดเก็บอ็อบเจ็กต์และคลาส JRE
2
การสั่งซื้อ
กองจะถูกสงวนไว้ในลำดับ LIFO (เข้าก่อนออกก่อน) เสมอ
หน่วยความจำฮีปคือการจัดสรรแบบไดนามิก ไม่มีรูปแบบตายตัวสำหรับการจัดสรรและจัดสรรบล็อกในหน่วยความจำ
3
ขนาด
เราสามารถเพิ่มขนาดหน่วยความจำสแต็กโดยใช้พารามิเตอร์ JVM -XSS
เราสามารถเพิ่มหรือลดขนาดหน่วยความจำฮีพได้โดยใช้ตัวเลือก JVM -Xms และ -Xmx
4
การมองเห็น
ตัวแปรมองเห็นได้เฉพาะกับเจ้าของเธรดเท่านั้น
ปรากฏแก่เธรดทั้งหมด
5
ข้อยกเว้น
JVM จะโยน java.lang.StackOverFlowError
JVM จะโยน java.lang.OutOfMemoryError