หนึ่งในข้อดีที่ชัดเจนที่สุดของ AVA คือกลไกการจัดการหน่วยความจำ คุณเพียงแค่ต้องสร้างวัตถุกลไกการกู้คืนขยะของ Java ของ Java มีหน้าที่ในการจัดสรรและปล่อยหน่วยความจำ อย่างไรก็ตามสถานการณ์ไม่ง่ายอย่างที่จินตนาการไว้เนื่องจากการรั่วไหลของหน่วยความจำมักเกิดขึ้นในแอปพลิเคชัน Java
บทช่วยสอนนี้แสดงให้เห็นว่าการรั่วไหลของหน่วยความจำคืออะไรทำไมมีการรั่วไหลของหน่วยความจำและวิธีการป้องกันการรั่วไหลของหน่วยความจำ
หน่วยความจำรั่วไหลคืออะไร?
คำจำกัดความ: หากวัตถุไม่ได้ใช้ในแอปพลิเคชันอีกต่อไป แต่เนื่องจากมีการอ้างถึงที่อื่นการรีไซเคิลขยะไม่สามารถลบออกได้ (ซึ่งทำให้หน่วยความจำจำนวนมากไม่มีเหตุผลทำให้เกิดการแปลว่าหน่วยความจำล้น)
เพื่อให้เข้าใจคำจำกัดความนี้เราต้องเข้าใจสถานะของวัตถุในหน่วยความจำ รูปด้านล่างแสดงผู้ที่ไม่ได้ใช้และไม่ได้อ้างถึง
จากรูปเราสามารถเห็นวัตถุอ้างอิงและวัตถุที่ไม่ได้เตรียมไว้ (ช่วง) ไม่มีวัตถุที่อ้างถึงอาจถูกนำกลับมาใช้ใหม่โดยกลไกการรีไซเคิลขยะและวัตถุอ้างอิงไม่สามารถนำกลับมาใช้ใหม่ได้โดยกลไกการกู้คืนขยะ แน่นอนว่าเป้าหมายไม่ได้ใช้เพราะไม่มีวัตถุอื่นที่อ้างถึง อย่างไรก็ตามไม่ได้อ้างถึงวัตถุทั้งหมด วัตถุที่ไม่ได้ใช้บางอย่างยังคงอ้างถึงที่อื่น! นี่คือสาเหตุของการรั่วไหลของหน่วยความจำ
ทำไมการรั่วไหลของหน่วยความจำจึงเกิดขึ้น?
มาถึงตัวอย่างนี้ด้านล่างเพื่อดูว่าทำไมหน่วยความจำรั่วเกิดขึ้น ในตัวอย่างต่อไปนี้วัตถุอ้างอิงวัตถุ B วัฏจักรชีวิตของ A (T1-T4) นานกว่าวงจรชีวิต (T2-T3) ของ B. เมื่อ B ไม่ได้ใช้ในแอปพลิเคชันอีกต่อไป ด้วยวิธีนี้กลไกการกู้คืนขยะไม่สามารถลบ B ออกจากหน่วยความจำได้ สิ่งนี้มีแนวโน้มที่จะทำให้หน่วยความจำรั่วไหลเพราะหากวัตถุอื่น ๆ จำนวนมากเป็นเหมือน A จะมีวัตถุจำนวนมากที่ไม่สามารถรีไซเคิลในหน่วยความจำซึ่งจะใช้พื้นที่หน่วยความจำจำนวนมาก
นอกจากนี้ยังเป็นไปได้ว่า B มีการอ้างอิงจำนวนมากไปยังวัตถุอื่น ๆ วัตถุเหล่านี้อ้างอิงโดย B จะไม่ถูกนำกลับมาใช้ใหม่ วัตถุที่ไม่ได้ใช้ทั้งหมดเหล่านี้จะใช้พื้นที่หน่วยความจำที่มีค่า
วิธีป้องกันการรั่วไหลของหน่วยความจำ?
ต่อไปนี้เป็นทักษะที่รวดเร็วในการป้องกันการรั่วไหลของหน่วยความจำ:
1. ให้ความสนใจกับคลาสคอลเลกชันเช่น hashmap, arraylist ฯลฯ เพราะพวกเขาเป็นที่ที่หน่วยความจำรั่วมักเกิดขึ้น เมื่อพวกเขาถูกประกาศว่าเป็นวัตถุคงที่วัฏจักรชีวิตของพวกเขานั้นยาวเท่ากับวงจรชีวิตของแอปพลิเคชัน
2. ให้ความสนใจกับการตรวจสอบเหตุการณ์และการโทรกลับ หากชั้นเรียนลงทะเบียนกับผู้ฟัง แต่เมื่อไม่ได้ใช้หมวดหมู่อีกต่อไปอุปกรณ์ตรวจสอบอาจไม่ถูกยกเลิกและอาจมีการรั่วไหลของหน่วยความจำ
3. "หากชั้นเรียนจัดการความทรงจำของตัวเองโปรแกรมเมอร์ควรแจ้งเตือนถึงการรั่วไหลของหน่วยความจำ" [1] หลายครั้งที่ชี้ไปที่สมาชิกวัตถุอื่น ๆ ในวัตถุจะต้องตั้งค่าเป็น null (เพื่อนำกลับมาใช้ใหม่)