Garbage Collection ใน Java: สิ่งที่คุณต้องรู้



บทความเกี่ยวกับการรวบรวมขยะใน Java นี้ช่วยให้คุณมีแนวคิดที่ชัดเจนเกี่ยวกับวิธีการทำงานประเภทและวิธีการต่างๆภายใต้การรวบรวมขยะใน Java

เป็นภาษาการเขียนโปรแกรมที่ใช้งานทั่วไปและหากในกรณีที่คุณเกิดสถานการณ์ที่มีข้อมูลที่ไม่ได้ใช้ในโปรแกรมของคุณและคุณไม่ทราบวิธีจัดการ Garbage Collection ใน Java ก็มีประโยชน์ ดังนั้นฉันจึงเขียนบทความนี้เพื่อช่วยคุณในการจัดการฟังก์ชันเหล่านี้

ฉันจะพูดถึงหัวข้อต่างๆตามลำดับต่อไปนี้:





โครงสร้างข้อมูลและอัลกอริทึมในการสอน Java

มาเริ่มกันเลย!

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

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



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

  • โปรแกรมที่ไม่ยกเลิกการจัดสรรหน่วยความจำในที่สุดก็สามารถหยุดทำงานได้เมื่อไม่มีหน่วยความจำเหลืออยู่ในระบบเพื่อจัดสรร มีการกล่าวถึงโปรแกรมทั้งหมดนี้ว่ามีการรั่วไหลของหน่วยความจำ
  • การรวบรวมขยะใน Java จะเกิดขึ้นโดยอัตโนมัติตลอดช่วงอายุของโปรแกรมทำให้ไม่จำเป็นต้องยกเลิกการจัดสรรหน่วยความจำและหลีกเลี่ยงการรั่วไหลของหน่วยความจำ
  • วิธีการเช่น ฟรี() ใน C และ ลบ() ใน C ++ ถูกใช้ แต่ใน Java จะดำเนินการโดยอัตโนมัติ ดังนั้น, ให้การจัดการหน่วยความจำที่ดีขึ้น

ตอนนี้เรามาทำความเข้าใจกันว่าการรวบรวมขยะอัตโนมัติทำงานอย่างไรใน Java

บันทึก : มีการกล่าวว่าวัตถุมีสิทธิ์ได้รับการรวบรวมขยะหากไม่สามารถเข้าถึงได้



Garbage Collection ทำงานอย่างไร?

Garbage Collection เป็นกระบวนการทำงานร่วมกับหน่วยความจำ Heap และ เครื่องหมาย หรือระบุวัตถุที่ไม่สามารถเข้าถึงได้และทำลายด้วยการบดอัด

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

ถึงแม้ว่าจะมี JVM มากมายก็ตาม Oracle’s HotSpot เป็นสิ่งที่พบได้บ่อยที่สุดเนื่องจากมีตัวเลือกการเก็บขยะที่สมบูรณ์และครบถ้วน

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

พนักงานเก็บขยะของ HotSpot ทั้งหมดใช้กลยุทธ์การเก็บรวบรวมแบบรุ่นที่แบ่งประเภทวัตถุตามอายุ เหตุผลที่อยู่เบื้องหลังการเก็บขยะในแต่ละรุ่นคือวัตถุส่วนใหญ่มีอายุการใช้งานสั้นและจะพร้อมสำหรับการเก็บขยะในไม่ช้าหลังจากการสร้าง

ตอนนี้เรามาดูกันว่าคนเก็บขยะประเภทต่างๆมีอะไรบ้าง

การเรียงลำดับอาร์เรย์ในโปรแกรม c ++

ประเภทของเครื่องกำจัดขยะ

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

พนักงานเก็บขยะมี 4 ประเภท

  • เครื่องกำจัดขยะแบบอนุกรม (GC) :เหตุการณ์การรวบรวมขยะทั้งหมดจะดำเนินการตามลำดับในเธรดเดียว การบดอัดจะดำเนินการหลังจากการรวบรวมขยะแต่ละครั้ง
  • GC แบบขนาน / ทรูพุต: เธรดหลายเธรดใช้สำหรับการรวบรวมขยะย่อย / เล็ก เธรดเดียวใช้สำหรับการรวบรวมขยะหลักและการบดอัดรุ่นเก่า นอกจากนี้ตัวแปร Parallel ยังใช้เธรดหลายเธรดสำหรับการรวบรวมขยะหลักและการบีบอัดรุ่นเก่า
  • นักสะสม CMS :เธรดหลายเธรดถูกใช้สำหรับการรวบรวมขยะขนาดเล็ก / รองโดยใช้อัลกอริทึมเดียวกับ Parallel การรวบรวมขยะส่วนใหญ่เป็นแบบมัลติเธรด แต่ CMS จะทำงานพร้อมกันพร้อมกับกระบวนการแอปพลิเคชันเพื่อลดเหตุการณ์ของแอปพลิเคชัน ไม่มีการบดอัด
  • นักสะสม G1 :โดยพื้นฐานแล้วเครื่องเก็บขยะนี้มีไว้เพื่อทดแทน CMS มันเป็นแบบขนานและทำงานพร้อมกันเหมือน CMS แต่ทำงานแตกต่างกันมากเมื่อเทียบกับเครื่องเก็บขยะรุ่นเก่า

เรามาทำความเข้าใจข้อดีของการรวบรวมขยะใน Java กัน

วิธีใช้ sort ใน c ++

ข้อดี

  • ประโยชน์ที่ใหญ่ที่สุดของการรวบรวมขยะ Java คือโดยอัตโนมัติ จัดการการลบ ของวัตถุที่ไม่ได้ใช้หรือวัตถุบางอย่างที่ไม่สามารถเข้าถึงได้เพื่อเพิ่มทรัพยากรหน่วยความจำ
  • Garbage Collection เป็นองค์ประกอบมาตรฐานใหม่ของภาษาโปรแกรมยอดนิยมหลายภาษา
  • ทำให้หน่วยความจำ Java มีประสิทธิภาพ เป็นเพราะตัวรวบรวมขยะลบอ็อบเจ็กต์ที่ไม่ได้อ้างถึงออกจากหน่วยความจำฮีป
  • มันคือ ทำโดยอัตโนมัติ โดยพนักงานเก็บขยะซึ่งเป็นส่วนหนึ่งของ JVM

ปฏิบัติที่ดีที่สุด

แนวทางที่ดีที่สุดในการปรับให้เข้ากับการรวบรวมขยะ Java คือการตั้งค่าแฟล็กบน JVM แฟล็กมีความสามารถในการปรับตัวเก็บขยะที่จะใช้ ช่วยในการทำให้เหมาะสมที่สุดสำหรับการประมวลผลแบ็กเอนด์ซึ่งยอมรับการหยุดเก็บขยะเป็นเวลานาน

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

มาดูโปรแกรมนี้กัน

คลาส Edureka {int a int b โมฆะสาธารณะ setData (int c, int d) {a = cb = d} โมฆะสาธารณะ showData () {System.out.println ('Value of a =' + a) System.out.println ('Value of b =' + b)} public static void main (String args []) {Edureka e1 = new Edureka () Edureka e2 = new Edureka () e1.setData (1,2) e2.setData (3, 4) e1.showData () e2.showData () // Edureka e3 // e3 = e2 //e3.showData () // e2 = null //e3.showData () // e3 = null //e3.showData ()}}

ในกรณีนี้ทั้งสองสร้างออบเจ็กต์และตัวแปรอ้างอิงสองตัว หากคุณเพิ่มคำสั่งอื่น e3 = Nullตัวแปรอ้างอิงสองตัวจะชี้ไปที่วัตถุเดียวกัน และหากไม่มีการอ้างอิงถึงตัวแปร e3 = e2e3.showData () ณ จุดนี้ไม่มีการอ้างอิงที่ชี้ไปที่วัตถุและจะมีสิทธิ์ได้รับการรวบรวมขยะ

เรามาถึงตอนท้ายของบทความ 'Garbage Collection in Java' เราได้เรียนรู้วิธีลบวัตถุที่ไม่ได้ใช้ในฮีปและคอลเล็กชันประเภทต่างๆ

หากคุณพบบทความนี้เกี่ยวกับ“ การรวบรวมขยะใน Java” โปรดดูที่ไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก เราพร้อมช่วยเหลือคุณในทุกขั้นตอนในการเดินทางเรามาพร้อมกับหลักสูตรที่ออกแบบมาสำหรับนักเรียนและมืออาชีพที่ต้องการเป็น Java Developer

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของ 'การรวบรวมขยะใน Java ' และเราจะติดต่อกลับโดยเร็วที่สุด