การจัดสรรหน่วยความจำใน Java: ทุกสิ่งที่คุณต้องการรู้ในปี 2022

เผยแพร่แล้ว: 2021-01-10

การ จัดสรรหน่วยความจำในจาวา หมายถึงกระบวนการที่โปรแกรมคอมพิวเตอร์และบริการได้รับการจัดสรรเฉพาะสำหรับพื้นที่หน่วยความจำเสมือน Java Virtual Machine แบ่งหน่วยความจำออกเป็น Stack และ Heap Memory สำหรับ Java Virtual Machine การเรียกใช้แอปพลิเคชันด้วยศักยภาพสูงสุดอาจเกิดขึ้นได้จากหน่วยความจำสแต็กและฮีป ทุกครั้งที่มีการประกาศตัวแปรหรืออ็อบเจ็กต์ใหม่ หน่วยความจำจะจัดสรรหน่วยความจำเฉพาะสำหรับการดำเนินการดังกล่าว

สารบัญ

หน่วยความจำกอง

การจัดสรรหน่วยความจำสต็อค ใน java ใช้สำหรับหน่วยความจำสแตติกและการประมวลผลเธรด ค่าที่อยู่ในหน่วยความจำนี้เป็นค่าชั่วคราวและจำกัดเฉพาะเมธอด เนื่องจากมีการอ้างอิงแบบ Last-In-First-Out

ทันทีที่มีการเรียกหน่วยความจำและมีการสร้างบล็อกใหม่ในหน่วยความจำสแต็ก หน่วยความจำสแต็กจะเก็บค่าดั้งเดิมและการอ้างอิงไว้จนกว่าเมธอดจะคงอยู่ หลังจากสิ้นสุด บล็อกจะถูกล้างและพร้อมสำหรับกระบวนการใหม่ที่จะเกิดขึ้น โดยทั่วไป ขนาดโดยรวมของหน่วยความจำสแต็กไม่มีนัยสำคัญกับขนาดหน่วยความจำฮีป

เรียนรู้การสร้างแอปพลิเคชัน เช่น Swiggy, Quora, IMDB และอื่นๆ

ลักษณะของหน่วยความจำสแต็ค

ตามส่วนต่างๆ ของการ จัดสรรหน่วยความจำใน Java Virtual Machine (JVM) ต่อไปนี้คือคุณลักษณะบางส่วนที่ไม่ต่อเนื่องของหน่วยความจำสแต็ก:

  • หน่วยความจำสแต็กสามารถขยายหรือหดตัวเมื่อมีการเรียกและส่งคืนวิธีการใหม่ ๆ
  • ตัวแปรใดๆ ในสแต็กสามารถรันได้ตราบเท่าที่ขอบเขตของเมธอดนั้นมีอยู่
  • จะได้รับการจัดสรรอัตโนมัติและการจัดสรรคืนเมื่อวิธีการดำเนินการ
  • ในกรณีที่หน่วยความจำเต็ม java.lang.StackOverFlowError จะเริ่มทำงาน
  • เข้าถึงได้เร็วกว่าเมื่อเทียบกับหน่วยความจำฮีป

อ่าน: Full-Stack vs. Software Engineer: คุณควรเลือกอันไหน?

เมธอดที่ใช้ในการ จัดสรรหน่วยความจำสแต็กใน java

  • Object push(Object element): ที่นี่ รายการจะถูกผลักไปที่ด้านบนสุดของสแต็ก
  • วัตถุป๊อป (): องค์ประกอบใด ๆ ที่อยู่ที่ด้านบนของสแต็กจะถูกล้างและส่งคืน ในกรณีที่สแต็กว่างเนื่องจากป๊อป () ถูกเรียกใช้ ข้อยกเว้น - EmptyStackException จะเกิดขึ้น
  • Object peek (): ที่นี่องค์ประกอบด้านบนได้รับการส่งคืน แต่ไม่ได้รับการล้าง
  • Boolean empty(): ถ้าลูปไม่มีค่าสูงสุดใน stack ฟังก์ชันจะคืนค่า 1 (true) มิฉะนั้น 0 (false)
  • ในการค้นหา (องค์ประกอบวัตถุ): ใช้เพื่อทำความเข้าใจว่าวัตถุมีอยู่ในสแต็กหรือไม่ ในกรณีที่พบค่า ฟังก์ชันจะส่งกลับตำแหน่งขององค์ประกอบจากด้านบนของสแต็ก มิฉะนั้นจะส่งกลับ -1

อ่าน: โปรเจ็กต์และหัวข้อ Java สำหรับผู้เริ่มต้น

Java Heap Space

Java Heap Space ใช้เป็นหลักโดยรันไทม์ java ทุกครั้งที่สร้างและจัดสรรอ็อบเจ็กต์ ฟังก์ชันที่ไม่ต่อเนื่อง เช่น Garbage Collection จะทำการล้างหน่วยความจำที่ใช้โดยอ็อบเจ็กต์ก่อนหน้าซึ่งไม่มีการอ้างอิง สำหรับอ็อบเจ็กต์ที่สร้างใน Heap Space สามารถเข้าถึงได้ฟรีทั่วทั้งแอปพลิเคชัน

การ จัดสรรหน่วยความจำใน java แบ่งออกเป็นส่วนต่างๆ ได้แก่ Heap, Stack, Code และ Static

ลักษณะของ Java Heap Memory

  • เข้าถึงได้จากเทคนิคการจัดการหน่วยความจำที่ซับซ้อน รวมทั้งรุ่นน้อง รุ่นเก่าหรือรุ่นอายุ และรุ่นถาวร
  • ในหน่วยความจำฮีพ เมื่อหน่วยความจำเต็ม จะส่งคืน java.lang.OutOfMemoryError
  • การเข้าถึงในหน่วยความจำนี้ค่อนข้างช้ากว่าหน่วยความจำสแต็ก
  • ไม่ผ่านการจัดสรรคืนอัตโนมัติและต้องใช้ฟังก์ชันที่คล้ายกัน เช่น Garbage Collector เพื่อลบวัตถุแปลกปลอมเพื่อให้หน่วยความจำทำงานในระยะที่เหมาะสมที่สุด

ตัวอย่างของการ จัดสรรหน่วยความจำสแต็กและฮีปในจาวา คือ:

แหล่งที่มา

Heap Space และ Stack Memory: ความแตกต่างพื้นฐาน

หน่วยความจำอวกาศฮีป หน่วยความจำกอง
ทุกส่วนของแอปพลิเคชันเรียกหน่วยความจำฮีป การดำเนินการหน่วยความจำสแต็กถูกจำกัดที่เธรดเดียว
ทุกครั้งที่สร้างอ็อบเจ็กต์ วัตถุนั้นจะถูกเก็บไว้ในพื้นที่ฮีป หน่วยความจำสแต็กประกอบด้วยการอ้างอิงและตัวแปรดั้งเดิมในเครื่องเท่านั้น
ออบเจ็กต์ที่นี่สามารถเข้าถึงได้ทั่วโลกในแอปพลิเคชัน เธรดอื่นไม่สามารถเข้าถึงอ็อบเจ็กต์หน่วยความจำสแต็ก
ในที่นี้ ความจำถูกกำหนดตามคนหนุ่มสาวและคนรุ่นเก่า การจัดการหน่วยความจำจะเกิดขึ้นแบบ Last-In-First-Out
หน่วยความจำยังคงอยู่ตามขอบเขตของแอปพลิเคชัน หน่วยความจำชั่วคราว
วิธีการเช่น – XMX และ XMS JVM ใช้เพื่อกำหนดขนาดที่เหมาะสมที่สุดของหน่วยความจำฮีป สำหรับหน่วยความจำสแต็ก มันถูกกำหนดโดยวิธี -XSS
ที่นี่ ข้อยกเว้นของ java.lang.OutOfMemoryError เกิดขึ้นในกรณีที่หน่วยความจำเต็ม ที่นี่ ข้อผิดพลาด java.lang.StackOverFlowError เกิดขึ้นในกรณีที่หน่วยความจำเต็ม
ขนาดจะมากกว่าแต่ต้องใช้เวลาในการประมวลผลเมื่อเทียบกับหน่วยความจำสแต็ก ขนาดจะเล็กลงแต่เร็วกว่าในการดำเนินการสำหรับการทำงานของ LIFO ที่ราบรื่น

อ่านเพิ่มเติม: เงินเดือนนักพัฒนา Java ในอินเดีย

เรียนรู้ หลักสูตรซอฟต์แวร์ออนไลน์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว

บทสรุป

การ จัดสรรหน่วยความจำใน java เกิดขึ้นได้สองวิธี ส่วนใหญ่สแต็กและพื้นที่ฮีป เราหวังว่าสิ่งนี้จะช่วยคุณในการทำความเข้าใจกระบวนการทั้งหมด

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการพัฒนาซอฟต์แวร์แบบฟูลสแตก โปรดดูโปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์แบบฟูลสแตก ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง โครงการมากกว่า 9 โครงการ และการมอบหมายงาน สถานะศิษย์เก่า IIIT-B โครงการหลักและความช่วยเหลือด้านงานกับบริษัทชั้นนำ

การจัดการหน่วยความจำเกิดขึ้นใน Java อย่างไร

Java Virtual Machine (JVM) เป็นโปรแกรมคอมพิวเตอร์ที่ใช้เรียกใช้โปรแกรมที่เขียนด้วยภาษาโปรแกรม Java ทำให้กระบวนการใช้การจัดการหน่วยความจำมีประสิทธิภาพ นอกจากนี้ มันยังได้รับการออกแบบมาให้แข็งแกร่ง ดังนั้น แม้ว่าจะมีข้อขัดข้องในระบบปฏิบัติการ แต่โปรแกรมที่รันบน JVM จะไม่ได้รับผลกระทบ การจัดการหน่วยความจำ หมายถึง การจัดการหน่วยความจำ (RAM) ทุกชิ้นในระบบคอมพิวเตอร์ JVM ตรวจสอบการจัดสรรและปล่อยหน่วยความจำเมื่อจำเป็น ทันทีที่โหลดโปรแกรมลงในหน่วยความจำ JVM จะจัดสรรพื้นที่หน่วยความจำให้ กระบวนการนี้เรียกว่าฮีป ฮีปเป็นพื้นที่หน่วยความจำทั่วไปสำหรับส่วนต่างๆ ของแอปพลิเคชัน

Garbage Collection ใน Java คืออะไร?

Java Virtual Machine (JVM) ใช้การนับอ้างอิงเพื่อติดตามจำนวนอ็อบเจ็กต์ Java ก่อนที่จะรวบรวมวัตถุใด ๆ จำนวนการอ้างอิงไปยังวัตถุนี้จะต้องเป็นศูนย์ โปรแกรมผู้ใช้สามารถลบวัตถุได้อย่างชัดเจนโดยการเรียกเมธอด finalize() Finalize เป็นเมธอดแบบสแตติกในคลาส Object ซึ่งเรียกโดย Garbage Collector (GC) วิธีการ Finalize จะปล่อยทรัพยากรทั้งหมดของวัตถุก่อนที่ Garbage Collector จะดูแลวัตถุนี้ Garbage Collector เป็นกระบวนการทำความสะอาดวัตถุที่ไม่ต้องการ กระบวนการของ Garbage Collector จะถูกทริกเกอร์เมื่อระบบรันไทม์ของ Java ตรวจพบว่า Java heap นั้นใกล้จะเต็มแล้ว ทุกอ็อบเจ็กต์มีบิตแมปใน JVM บิตแมปถูกตั้งค่าให้แต่ละอ็อบเจ็กต์ติดตามว่ามีการใช้งานหรือไม่ เมื่อบิตแมปเปลี่ยนเป็น 0 GC จะดูแลวัตถุนี้

คุณสมบัติของภาษาโปรแกรม Java คืออะไร?

Java Programming Language เป็นภาษาการเขียนโปรแกรมระดับสูงสำหรับวัตถุประสงค์ทั่วไปที่ใช้ในการสร้างแอปพลิเคชันและแอปเพล็ต ซอฟต์แวร์ Java สามารถทำงานบนแพลตฟอร์มใดก็ได้ที่รองรับ Java โดยไม่ต้องตั้งโปรแกรมใหม่ คุณสมบัติของภาษาการเขียนโปรแกรม Java ได้แก่: คุณสมบัติเชิงวัตถุ แข็งแกร่ง ความปลอดภัยสูง และไม่ขึ้นกับแพลตฟอร์ม ไม่มีค่าใช้จ่าย เรียนรู้และใช้งานง่าย Java เป็นภาษาการเขียนโปรแกรมเชิงวัตถุซึ่งเป็นอิสระจากแพลตฟอร์มและสามารถใช้กับระบบปฏิบัติการหรือแพลตฟอร์มใดก็ได้ Java เป็นภาษาที่คอมไพล์และสร้าง bytecode ซึ่งจะถูกดำเนินการใน Java Virtual Machine