เป็นภาษาการเขียนโปรแกรมที่ใช้งานทั่วไปและหากในกรณีที่คุณเกิดสถานการณ์ที่มีข้อมูลที่ไม่ได้ใช้ในโปรแกรมของคุณและคุณไม่ทราบวิธีจัดการ Garbage Collection ใน Java ก็มีประโยชน์ ดังนั้นฉันจึงเขียนบทความนี้เพื่อช่วยคุณในการจัดการฟังก์ชันเหล่านี้
ฉันจะพูดถึงหัวข้อต่างๆตามลำดับต่อไปนี้:
โครงสร้างข้อมูลและอัลกอริทึมในการสอน Java
- Garbage Collection ใน Java คืออะไร?
- Garbage Collection ทำงานอย่างไร?
- ประเภทของการเก็บขยะ
- ข้อดี
- ปฏิบัติที่ดีที่สุด
มาเริ่มกันเลย!
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 ' และเราจะติดต่อกลับโดยเร็วที่สุด